如何在python中并行迭代任意数量的文件?

时间:2014-01-21 02:40:39

标签: python loops

我在名为paths

的列表中有一个文件对象列表

我希望能够通过读取每个文件的第一行,使用这个n元组的数据做一些事情,然后移动每个文件的第二行。 path中的文件对象数是任意的。

这可能吗?

3 个答案:

答案 0 :(得分:4)

import itertools
for line_tuple in itertools.izip(*files):
    whatever()

我使用zip,但这会将文件的全部内容读入内存。请注意,files应该是文件对象的列表;我不确定“文件处理程序列表”是什么意思。

答案 1 :(得分:4)

这取决于它实际上是多么“武断”。只要该数字小于您的操作系统限制,itertools.izip就可以正常工作(或itertools.izip_longest视情况而定)。

files = [open(f) for f in filenames]
for lines in itertools.izip(*files):
    # do something

for f in files:
    f.close()

如果你的操作系统可以容纳多个文件,那么你就不幸了(至少就一个简单的解决方案而言)。

答案 2 :(得分:0)

第一个想法突然出现在我的脑海中,下面的代码似乎过于简单

fp_list = []
for file in path_array:
    fp = open(file)
    fp_list.append(fp)

line_list = []
for fp in fp_list:
    line = fp.readline()
    line_list.append(line)
    ## you code here process the line_list

for fp in fp_list:
    fp.close()