我有3个非常大的文件(+100 MB)file_hash,cert_hash和url_data每行有一个字符串。问题是所有这些文件中的数据大小不同。我已经使用izip_longest函数一次读取所有这些文件(无法将这些文件加载到内存中)但是我想迭代它以获取最长的文件(file_hash最长)并且假设已经读取了cert_hash中的所有数据它应该开始服用从cert_hash文件开头的值,类似地,如果url_data结束,它也从头开始读取。我尝试过使用fillvalue参数,但它只需要一个值,我想为cert_hash和url_data提供不同的值,如果它们结束了。
答案 0 :(得分:0)
如果您希望它们重新启动,您应该cycle
cert_hash
和url_data
。例如:
>>> from itertools import cycle, izip
>>> for t in izip("abcdef", cycle("ghi"), cycle("jklm")):
print t
('a', 'g', 'j')
('b', 'h', 'k')
('c', 'i', 'l')
('d', 'g', 'm')
('e', 'h', 'j')
('f', 'i', 'k')
请注意,您不再使用izip_longest
,因为cycle
是无限的。
如果你想在结束而不是开始时重新启动,这里是对cycle
等效实现的调整,实现了:
>>> def zigzag(iterable):
"""zigzag('ABCD') --> A B C D C B A B C D ..."""
forward = []
for element in iterable:
yield element
forward.append(element)
backward = forward[-2:0:-1]
while True:
for element in backward:
yield element
for element in forward:
yield element
>>> z = zigzag("ABCD")
>>> for _ in range(10):
print next(z)
A
B
C
D
C
B
A
B
C
D