对一个大文件进行筛选处理
如果满足条件写入新文件中,对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方式可以限制每次读取文件的大小,但是不满足按行读取的要求,所以忽略。