Python:高效文件输入输出
同时读取两个大文件并进行处理,最有效(最快)的方法是什么?
我有两个文件:a.txt 和 b.txt,每个文件大约有十万行对应的内容。我的目标是读取这两个文件,然后对每一对行进行处理。
def kernel:
a_file=open('a.txt','r')
b_file=open('b.txt', 'r')
a_line = a_file.readline()
b_line = b_file.readline()
while a_line:
process(a_spl,b_spl) #process requiring both corresponding file lines
我查了一下 xreadlines 和 readlines,但我在想是否还有更好的方法。速度对这个任务来说非常重要。
谢谢。
4 个回答
1
字符串输入输出可以非常快——可能是你的处理过程让速度变慢了。想象一下一个简单的输入循环,用来把数据放进一个队列,像这样:
queue = multiprocessing.Queue(100)
a_file = open('a.txt')
b_file = open('b.txt')
for pair in itertools.izip(a_file, b_file):
queue.put(pair) # blocks here on full queue
你可以建立一个进程池,从队列中取出项目并对每个项目进行处理,前提是你的问题可以这样并行处理。
1
你可以使用 with
语句来确保在执行完操作后,文件会被自动关闭。来自 这个博客 的内容:
如果你想打开一个文件,处理它的内容,并确保最后关闭它,你可以简单地这样做:
with open("x.txt") as f:
data = f.read()
do something with data
2
下面的代码不会把输入文件中的数据存储到内存里,除非process
函数自己去做这件事。
from itertools import izip
def process(line1, line2):
# process a line from each input
with open(file1, 'r') as f1:
with open(file2, 'r') as f2:
for a, b in izip(f1, f2):
process(a, b)
如果process
函数运行得很高效,这段代码在大多数情况下应该能快速执行。for
循环会在其中一个文件结束时停止。如果任意一个文件里有特别长的行(比如XML或JSON格式),或者文件不是文本格式,这段代码可能就不太好用了。