Python 中的一些实用技巧

  积累一些在使用Python中能用到的一些技巧!

生成一个独一无二的时间文件夹

import time
timeformat = '%Y%m%d%H%M%S'
timeinfo = str(time.strftime(timeformat))
timeinfo
'20160810180815'

去除list中的空字符串

  • 例如 a = ['a','b','','c'] 去除其中的空字符串
def removeEmptyString(inputlist):
    temp = []
    for line in inputlist:
        if line:
            temp.append(line)
    return temp
  • 或者使用一行迭代, 更简洁, 速度更快
b = [var for var in a if var]
print(b)

定位当前脚本的绝对路径

import os
def getlocalpath():
    relpath = os.path.split(os.path.realpath(__file__))[0]
    return relpath

判断目录若不存在则创建

import os
if not os.path.exists(dirname):
    os.makedirs(dirname)

list 取交集,并集和差集

  • 例如 a = ['a','b','c']b = ['b','c','d']

  • 交集:

print list(set(a).intersection(set(b)))

#或者
isec = [val for val in a if val in b]
print isec

  • 并集
print list(set(a).union(set(b)))
  • 差集
print list(set(b).difference(set(a))) # b-a

把一个list分割成固定长度子list

例如 list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 分割成固定长度为3的子list

def splite_list(splist, s):
    """splite a list to sub list contain s"""
    return [splist[i:i + s] for i in range(len(splist)) if i % s == 0]

#test
list1 = range(10)
splite_list(list1,2)
[[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]]

在Python中调用Linux下的export

  • Python中改变Linux 的环境变量不能简单的使用 os.system() 或者 subprocess.call()来完成.
  • 例如:下列方法无法完成
import os
import subprocess
os.system("export OMP_NUM_THREADS=8")
subprocess.call("export OMP_NUM_THREADS=8",shell=True)

  • 可以使用os.environ来导入环境变量
import os
os.environ["OMP_NUM_THREADS"] = "8"

合并List

  • 例如 a = [[a,b],[a,c],[a,d]]
a = [[1,2],[3,4],[1,4]]
b = [x for j in a for x in j]
print b
[1, 2, 3, 4, 1, 4]

List去除重复

  • 例如 a = [1,2,3,3,4,1]
a = [1,2,3,3,4,1]
b = list(set(a))
print b
[1, 2, 3, 4]

临时文件创建

  • python标准库tempfile提供了一个临时文件储存的地方,脚本结束自动销毁
import tempfile
temp = tempfile.TemporaryFile() # 实例化
temp.write('create a temp file') # 写入
temp.seek(0) # 回到起点位置
print temp.read()
temp.close() # 手动关闭下

读取文件跳过首行可以用islice

  • 有时侯处理文本想跳过首行,也就是header,可以使用islice完成
$ cat file.txt
name ages
nice 20
pretty 18
from itertools import islice

with open('file.txt') as f:
    for i in islice(f, 1, None):
        print
#print
nice 20
pretty 18

Python创建虚拟环境

  • Python有一个非常好的设计就是可以创建一个虚拟环境,然后在虚拟环境里面测试,最后删除虚拟环境,这样 设计可以完全与本地Python环境隔开,互不干扰。

安装

$ pip install virtualenv

创建一个虚拟环境

  • 创建虚拟环境使用virtualenv命令来创建,名字可自己随便命名的。
$ virtualenv ven

激活虚拟环境

  • 激活虚拟环境使用的是source命令执行的bin下的activate即可。激活后会看到终端命令行前有(ven)的标志。
$ source ven/bin/activate

退出虚拟环境

$ deactivate

删除虚拟环境

$ rm -rf ven

Python 生成英文字母表

手动生成

  • 小写字母表
list(map(chr,list(range(97, 123))))

  • 大写字母
list(map(chr,list(range(65, 91))))

利用库函数 string

  • 小写字母表
import string
string.ascii_uppercase

  • 大写字母
import string
string.ascii_lowercase

字典排序

  • 按键排序
dic = {'a':11 , 'b':5 , 'c': 7}

# 升序排序
sorted(dic.keys())

# 降序排序
sorted(dic.keys(), reverse=True)

  • 按值排序
dic = {'a':11 , 'b':5 , 'c': 7}

# 升序
sorted(dic.items(), key = lambda x:x[1])

# 降序
sorted(dic.items(), key = lambda x:x[1],reverse =True)

获取目录忽略隐藏文件

import os
dir_path = '/home/user/'

filter( lambda f: not f.startswith('.'), os.listdir(dir_path))

0 和 1 反转方法

使用OXR位操作


x = [0,1,0,1]
[var ^ 1 for var in x]

使用 not 操作


x = [0,1,0,1]
[int(not var) for var in x]


使用减法操作


x = [0,1,0,1]
[1 - var for var in x]

三种方法耗时比较


import numpy as np
x= np.random.randint(0,2,100000).tolist()

%timeit [var ^ 1 for var in x]
4.88 ms ± 73.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit [int(not var) for var in x]
11.1 ms ± 139 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit [1 - var for var in x]
2.8 ms ± 16.6 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

2020-7-2更新


Search

    Post Directory