主要介绍了随机数模块random,bisect模块,深copy和浅copy,正则匹配re模块,查找匹配文件模块glob和统计模块Counter,大文件督导缓存linecache模块,文件压缩模块(zlib模块,gzip模块),文档的归档压缩tarfile模块,csv模块,该模块读写逗号分隔符模块(即读写xls表格),读取配置文件configparser模块,logging模块,处理日志,获取计算机登陆名getpass模块等模块
1.随机数模块(random)
该模块能实现随机数生成,从tuple中随机选择一个数,洗牌,等操作,具体如下:
import randow
print(randow.randow()) #0.0-1.0之间的随机数
print(randow.uniform(a,b)) # a-b之间的随机浮点数
print(randow.randrange(n)) # 0-n之间的随机整数
print(randow.randrange(start,stop,step)) #start-stop,以步长step的随机数
print(randow.choice(items)) #从序列items中随机选择一个数
print(randow.shuffle(items)) #将items随机洗牌
print(randow.sample(items,n)) #从items中随机重复抽样n个
print(<span style="font-family: 'Courier New'; line-height: 24px; white-space: pre-wrap;">random.gauss(WIDTH/2.0</span><span style="font-family: 'Courier New'; white-space: pre-wrap; margin: 0px; padding: 0px; line-height: 1.5 !important;">, SIGMA)</span>) #高斯分布的随机数,还有其他的分布的随机数
2. bisect模块(类似离散化的分箱,每个箱有标签,形成字典)
如学生成绩 ABCDE 分别对应 100-90,90-80,80-70,70-60,<60(不及格),操作如下:
import random
import bisect
def grade(score, breakpoints = [60, 70, 80, 90], grades = 'EDCBA'):
i = bisect.bisect(breakpoints, score) #按切割点划分
return grades[i]
scores = []
for i in range(6):
scores.append(random.randrange(0,101,1))
results = [grade(score) for score in scores] #语句表达,循环
print('学生成绩:{}\n评定结果:{}'.format(scores, results))
import copy
L1 = [1,2,3]
L2 = copy.deepcopy(L1)
L3 = copy.copy(L1)
L2.append(5) #深拷贝,理解为复制,L2改变不影响L1
L3.append(6) #浅拷贝,理解为引用,L3改变,L1同时也改变
4. 正则匹配re模块,查找匹配文件模块glob和统计模块Counter
正则匹配模块详细请见:http://blog.sina.com.cn/s/blog_a15aa56901017liq.html
import os
import re
from collections import Counter
path = r'C:\test.txt'
contents = re.findall(r'w+',open(path).read().lower())#读取文件的所有内容(单词序列)
#正则匹配还能有各种匹配字符,很多
print(Counter(contents)) #统计每个单词的次数,形成字典,单词为keys,次数为值,形成键-值对
print(Counter(contents).most_common(3))#输出次数最多的三个单词,对应也有最少的单词函数
查找匹配文件glob模块,非常简单,明白规则,该规则是shell语言的规则,如下:
import glob
'''在python中,glob模块是用来查找匹配的文件的匹配规则:
* : 匹配所所有
? : 匹配一个字符
*.* : 匹配如:[hello.txt,cat.xls,xxx234s.doc]
?.* : 匹配如:[1.txt,h.py]
?.gif: 匹配如:[x.gif,2.gif]
如果没有匹配的,glob.glob(path)将返回一个空的list:[]'''
print(glob.glob('c:\\test\\*.*'))
5. 把文件读到缓存,数据不存储在磁盘上,读取到缓存适用于高频率的读取时, 日常编程中如果涉及读取大文件,一定要使用首选linecache模块,相比 open() 那种方法要快N倍,它是你读取文件的效率之源,来源:http://www.iplaypython.com/module/linecache.html
import os
import linecache
path = r'C:\test.txt'
content = ''
cache_data = linecache.getlines(path)#getlines函数最常用
for line in range(len(cache_data)):
content +=cache_data[line]
print(content)
6. 文件压缩模块(zlib模块,gzip模块),文档的归档压缩tarfile模块
首先看看zlib模块,主要函数zlib.compress(bytes(data,'utf-8'))和zlib.decompress(cdata),例子如下:
import os
import zlib
path = r'C:\test.txt'
content = ''
fp = open(path,'r+')
for line in fp:
content +=line
com_data = zlib.compress(bytes(content,'utf-8'))#指定压缩的格式
decom_data = zlib.decompress(com_data)
gzip模块功能很强大,在gzip模块提供了GzipFile类,在该类中提供了像open(),compress()和depress()等一些方便的方法,GzipFile类在读写gzip格式的文件的时候,自动的压缩和解压缩数据类似于操作普通的文件对象。
import os
import gzip
path = r'C:\test.txt'
content = b'adfa' #二进制一定要加上b,否则下面的写操作要出错
with gzip.open(path,'wb') as fp: #二进制写,同时压缩成zip
fp.write(content)
fp.close()
with gzip.open(path,'rb') as f:
f.read()
f.close()
import os
import tarfile
ext_name = r'C:test.txt' #提取指定文件名的文件
tar_path = r'C:\temp.tar'
path = os.path.split(tar_path)[0]
mkdir(path) #新建目录
mkdir(tar_path)
items = os.listdir('./')#获取当前工作目录的所有文件
#压缩
with tarfile.open(tar_path,'w') as tar:
for n in items:
tar.add(n)
tar.close()
#解压指定文件名的文件
with tarfile.open(tar_path,'r') as data:
names = tar.getnames()
for name in names:
if name.split('.') ==ext_name:
tar.extract(name,path = ext_path)
该模块读写逗号分隔符模块(即读写xls表格),需要将.xls文件另存为.csv文件(execl就能转换)
详细见:http://www.2cto.com/kf/201303/194320.html
8.读取配置文件configparser模块,详细见:http://www.codesky.net/article/201003/122500.html
9.logging模块,处理日志(略)
10.获取计算机登陆名getpass模块:
import os
import getpass
user_name = getpass.getuser()
print(user_name)