【问题标题】:Python | Looping over pairs of files蟒蛇 |循环文件对
【发布时间】:2018-06-17 05:41:48
【问题描述】:

我在单个目录中有大量具有以下文件名格式的文件对:<int>-<code>.txt。我需要有效地循环具有相同<int> 部分的文件对。由于有问题的文件数量,我想避免完整的列表评估。您可以假设每个文件都保证是一对。

例子

0-A.txt
0-B.txt
1-A.txt
1-B.txt
7-A.txt
7-B.txt

顺序并不重要,只是返回匹配的文件。我试过了:

import glob
A_files = glob.iglob('*-A.txt')
B_files = glob.iglob('*-B.txt')
for A_file, B_file in zip(A_files, B_files):
  pass

但是,glob 没有指定的顺序,所以我没有收到匹配的对。对迭代器进行排序会产生巨大的列表。有没有一种有效的方法来遍历匹配的文件对?

【问题讨论】:

    标签: python python-3.x iterator


    【解决方案1】:

    既然您知道有成对的 A-B 文件,您可以只迭代 A 文件并创建 B 文件名:

    import glob
    A_files = glob.iglob('*-A.txt')
    for A_file in A_files:
      B_file = A_file.partition("-")[0]+"-B.txt"
    

    A_file.partition("-")[0] 提取破折号前的数字,以便您生成另一个文件。您甚至可以确保 B 文件没有丢失(当然,对于 A 文件,您不能这样做)

    【讨论】:

    • 不敢相信我想不到。谢谢。
    【解决方案2】:

    如果你知道你总是有一对文件,你只需要一个 glob:

    A_files = glob.iglob('*-A.txt')
    file_pairs = ((file_a,file_a.replace("-A.txt","-B.txt")) for file_a in A_files)
    for file_A,file_B in file_pairs:
        pass
    

    这假设您没有任何 *-B.txt 文件没有 *-A.txt 匹配文件,但由于您的示例使用 zip()我认为是这样的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-06
      相关资源
      最近更新 更多