【问题标题】:How to iterate across lines in two files simultaneously?如何同时遍历两个文件中的行?
【发布时间】:2011-03-20 08:12:25
【问题描述】:

我有两个文件,我想对它们执行一些逐行操作。 (换句话说,每个文件的第一行对应,第二行也是如此,等等。)现在,我可以想到一些稍微麻烦的方法来同时遍历两个文件。 然而,这是 Python,所以我想有一些语法简写。

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

for line in file:

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

【问题讨论】:

    标签: python iterator


    【解决方案1】:

    Python 2:

    使用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

    在 Python 3 中,请改用 zipzip_longest。此外,使用with 打开文件,即使出现错误也会自动处理关闭。

    with open(file1name) as file1, open(file2name) as file2:
        for line1, line2 in zip(file1, file2):
            #do stuff
    

    【讨论】:

    • + 使用 izip 代替 zip
    • 在 Python 3 中,需要使用zip
    • 在 Python 3 中,如果要使用直到最长文件末尾的行,请使用 itertools.zip_longest
    【解决方案2】:

    你可以试试

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

    但请注意,当较短的文件结束时,此循环将退出。

    在使用 Python 2 时,itertools.izip 更适合这种事情,因为它不会创建 list

    【讨论】:

    • zip 如果您使用 Python 3 是可以的(您回复时可能不存在)。编辑。
    【解决方案3】:

    后人的完整示例:

    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 可确保文件在使用后得到清理,即使发生异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-12
      • 2020-11-20
      • 2011-08-03
      • 2012-07-22
      • 1970-01-01
      • 2023-02-02
      • 2023-01-10
      • 2021-10-15
      相关资源
      最近更新 更多