对一个大文件进行筛选处理
如果满足条件写入新文件中,对python的几种方式进行执行时间对比结果如下:
方法一:
import time start = time.clock() with open('/Users/test.txt', 'wb') as p: with open('/Users/test_access.log', 'rb') as f: for chunk in f: if '/userrank/player_live_rank' in chunk.decode(): p.write(chunk) f.close() p.close() seconds = time.clock() - start print(seconds)
执行时间0.889576s
方法二:
import time start = time.clock() p = open('/Users/test.txt', 'wb') f = open('/Users/test_access.log', 'rb') while True: line = f.readline() if line: if '/userrank/player_live_rank' in line.decode(): p.write(line) else: break f.close() p.close() seconds = time.clock() - start print(seconds)
执行时间0.979271s
使用with的方式比直接readline要快一些,文件越大,效果越明显。
备注:
大文件的读取不考虑readlines方式,它一次性将文件读取到内存中,会耗光内存。
read方式可以限制每次读取文件的大小,但是不满足按行读取的要求,所以忽略。