【问题标题】:How to iterate over arbitrary number of files in parallel in python?如何在python中并行迭代任意数量的文件?
【发布时间】:2014-01-21 02:40:39
【问题描述】:

我在名为paths 的列表中有一个文件对象列表

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

这可能吗?

【问题讨论】:

    标签: python loops


    【解决方案1】:
    import itertools
    for line_tuple in itertools.izip(*files):
        whatever()
    

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

    【讨论】:

    • 我的意思是像你说的那样说“文件描述符”或“文件对象”。我编辑了我的原始文件并将“文件处理程序”更改为“文件对象”。谢谢!
    【解决方案2】:

    这取决于它实际上有多“任意”。只要数量小于操作系统的限制,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()
    

    如果您可以打开的文件多于您的操作系统允许您打开的文件,那么您就不走运了(至少就简单的解决方案而言)。

    【讨论】:

    • python3.x 兼容性说明:itertools.izip -> zipitertools.izip_longest -> itertools.zip_longest.
    【解决方案3】:

    脑子里第一个想到的就是下面的代码,好像太直接了

    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()
    

    【讨论】:

      猜你喜欢
      • 2021-08-12
      • 2012-03-13
      • 2020-01-12
      • 2015-09-14
      • 1970-01-01
      • 2016-12-25
      • 2020-01-04
      • 1970-01-01
      • 2019-12-27
      相关资源
      最近更新 更多