Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python |在成对文件上循环_Python_Python 3.x_Iterator - Fatal编程技术网

Python |在成对文件上循环

Python |在成对文件上循环,python,python-3.x,iterator,Python,Python 3.x,Iterator,我在一个目录中有大量以下文件名格式的文件对:-.txt。我需要有效地循环使用相同的部分的成对文件。我想避免完整的列表评估,因为有问题的文件数量。您可以假设每个文件都保证正好是一对 范例 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_f

我在一个目录中有大量以下文件名格式的文件对:
-
.txt
。我需要有效地循环使用相同的
部分的成对文件。我想避免完整的列表评估,因为有问题的文件数量。您可以假设每个文件都保证正好是一对

范例

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没有指定的顺序,所以我不接收匹配对。对迭代器进行排序会产生巨大的列表。有没有一种有效的方法来循环匹配的文件对?

因为您知道存在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文件,您不能这样做)

如果您知道您总是有一对文件,一个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()
我假设是这样的情况

不敢相信我想不出来。非常感谢。