主要介绍了随机数模块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>) #高斯分布的随机数,还有其他的分布的随机数
如学生成绩 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\\*.*'))
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)
首先看看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)