每天一点小进步(2):python 大文件处理

对一个大文件进行筛选处理

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

原文地址:https://www.cnblogs.com/wx2017/p/12859684.html