为什么在python中不能使用zip函数同时读取大文件?
我需要同时处理两个大文件,这意味着它们的行彼此对应,我需要过滤两个文件中的一些行。我正在使用以下代码:为什么在python中不能使用zip函数同时读取大文件?,python,Python,我需要同时处理两个大文件,这意味着它们的行彼此对应,我需要过滤两个文件中的一些行。我正在使用以下代码: with open(path1, "r") as fq, \ open(path2, "r") as ft, \ open(path3 + ".filter", "w") as wtq, \ open(path4 + ".filter", "w") as wtt: for q, t in zip(fq, ft):
with open(path1, "r") as fq, \
open(path2, "r") as ft, \
open(path3 + ".filter", "w") as wtq, \
open(path4 + ".filter", "w") as wtt:
for q, t in zip(fq, ft):
q, t = q.strip().split(), t.strip().split()
...
wtq.write(" ".join(q) + "\n")
wtt.write(" ".join(t) + "\n")
但是内存使用量会逐渐增加,直到程序被终止
当我将其更改为以下内容时,一切正常:
for q in fq:
t = ft.readline()
...
zip函数如何工作以及如何优雅地同时读取多个大文件?
zip()
在Python2中创建了一个列表,因此整个内容在内存中读取,然后由循环遍历。尝试使用izip()
从itertools模块导入izip。谢谢!我以前使用python3和zip来同时读取只有小数据的文件。今天我遇到了这个麻烦。在Python2中,zip
构建了一个列表和izip
一个迭代器。在Python3中,izip
消失了,zip
构建了一个迭代器(与map
和imap
相同,range
和xrange
)。zip()
在Python2中创建了一个列表,因此整个内容都在内存中读取,然后由循环遍历。尝试使用izip()
从itertools模块导入izip。谢谢!我以前使用python3和zip来同时读取只有小数据的文件。今天我遇到了这个麻烦。在Python2中,zip
构建了一个列表和izip
一个迭代器。在Python3中,izip
消失,而zip
构建了一个迭代器(与map
和imap
,range
和xrange
相同)。