我知道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?


zipitertools.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/

10-12 04:42