拉链最长的python 2.7

时间:2014-12-09 17:57:30

标签: json file python-2.7 zip

我有3个非常大的文件(+100 MB)file_hash,cert_hash和url_data每行有一个字符串。问题是所有这些文件中的数据大小不同。我已经使用izip_longest函数一次读取所有这些文件(无法将这些文件加载​​到内存中)但是我想迭代它以获取最长的文件(file_hash最长)并且假设已经读取了cert_hash中的所有数据它应该开始服用从cert_hash文件开头的值,类似地,如果url_data结束,它也从头开始读取。我尝试过使用fillvalue参数,但它只需要一个值,我想为cert_hash和url_data提供不同的值,如果它们结束了。

1 个答案:

答案 0 :(得分:0)

如果您希望它们重新启动,您应该cycle cert_hashurl_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