我知道izip
可以一次读取两个文件,但是我不知道如何同时遍历两个文件(或者这样做是否合理)。这是我在代码上的第一步,该代码应逐行读取docs并返回docs是否具有相同数量的行:
from sys import argv
import itertools
a = 0
b = 0
doc1 = open(argv[1],"r")
doc2 = open(argv[2],"r")
for lineA,lineB in itertools.izip(doc1,doc2):
a = a + 1
b = b + 1
if a/b == 1:
print "equal number of lines in docs"
else:
print "docs with different number of lines"
最佳答案
这是一个简单的示例,以说明为什么它不起作用:
>>> a = range(5)
>>> b = range(10)
>>> zip(a, b)
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)] # ...is that it?
zip
和itertools.izip
截断任何可迭代的最长的对象,因此您将始终得出结论,两个文件的长度相同。而是使用
itertools.izip_longest
,它不会截断更长的文件:>>> from itertools import izip_longest
>>> list(izip_longest(a, b))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (None, 5), (None, 6), (None, 7), (None, 8), (None, 9)]
# ^ default fillvalue
现在您可以检查
if lineA is None:
检测文件何时用完。关于python - 尝试检查行数是否相同;我正确使用izip吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31991806/