代码之家  ›  专栏  ›  技术社区  ›  chimeracoder

如何在两个文件中同时跨行迭代?

  •  17
  • chimeracoder  · 技术社区  · 16 年前

    我有两个文件,我想在两个文件之间执行一些逐行操作。(换句话说,每个文件的第一行与第二行相对应,等等)现在,我可以想出一些稍微麻烦的方法来同时遍历两个文件; 然而 ,这是python,所以我想这里有一些语法速记。

    换句话说,是否有一些简单的方法来适应

    for line in file:
    

    所以它同时从两个文件中提取数据?

    3 回复  |  直到 9 年前
        1
  •  33
  •   Daniel Roseman    16 年前

    使用 itertools.izip 连接两个迭代器。

    from itertools import izip
    for line_from_file_1, line_from_file_2 in izip(open(file_1), open(file_2)):
    

    如果文件长度不相等,请使用 izip_longest .

        2
  •  9
  •   Jean-François Fabre    9 年前

    你可以试试

    for line1, line2 in zip(file1, file2):
        #do stuff
    

    但是要小心,当较短的文件结束时,此循环将退出。

    使用python 2时, itertools.izip 对这类事情更好,因为它不会 list .

        3
  •  3
  •   Ethan Furman    10 年前

    后代的完整例子:

    from itertools import izip, izip_longest
    
    file1name = '/some/path/and/file'
    file2name = '/another/path/and/another/file'
    
    with open(file1name) as file1, open(file2name) as file2:
        for line1, line2 in izip(file1, file2):   # or izip_longest
            # do something with the lines
    

    使用 with 确保在使用后清理文件,即使发生异常。