我正在尝试分析两个±6 GB的文件。我需要同时分析它们,因为我需要同时使用两行(每个文件一行)。我试着做这样的事情:
with open(fileOne, "r") as First_file:
for index, line in enumerate(First_file):
# Do some stuff here
with open(fileTwo, "r") as Second_file:
for index, line in enumerate(Second_file):
# Do stuff here aswell
问题是在第二个“with open”循环开始于文件的开头。因此,分析将花费很长时间。我也试过这个:
with open(fileOne, "r") as f1, open(fileTwo, "r") as f2:
for index, (line_R1, line_R2) in enumerate(zip(f1, f2)):
问题是两个文件都直接加载到内存中。我需要每个文件中的相同行。正确的行是:
number_line%4 == 1
这将给出第2,5,9,13行等。我需要两个文件中的那些行。
有更快的方法和更高效的内存方式吗?
答案 0 :(得分:7)
在Python 2中,使用itertools.izip()
来防止文件被加载到内存中:
from itertools import izip
with open(fileOne, "r") as f1, open(fileTwo, "r") as f2:
for index, (line_R1, line_R2) in enumerate(izip(f1, f2)):
内置的zip()
函数确实会将两个文件对象全部读入内存,izip()
一次检索一行。