如何同步遍历两个目录同名文件并执行对应操作?
同名文件配对处理解决方案
问题概述
Folder 1 和 Folder 2 都包含 A.txt、B.txt,需要让两个目录下的同名 .txt 文件配对执行操作(如合并),但当前嵌套循环的写法会遍历所有文件组合,无法实现精准的同名配对。已知路径:patha=/folder1,pathb=/folder2,现有代码如下:
import os,glob for filename in glob.glob(os.path.join(patha,'*.txt'): for filenamez in glob.glob(os.path.join(pathb,'*.txt'): MY FUNCTION THAT DOES OTHER STUFF
解决思路
核心是基于文件名关联两个目录的文件,而非嵌套遍历所有组合。以下是几种可行方案:
方案1:直接按文件名匹配
先遍历第一个目录的文件,提取纯文件名后直接去第二个目录查找对应文件,确保同名配对:
import os import glob patha = "/folder1" pathb = "/folder2" # 遍历Folder1下所有txt文件 for file_a in glob.glob(os.path.join(patha, '*.txt')): # 提取不含路径的纯文件名 file_name = os.path.basename(file_a) file_b = os.path.join(pathb, file_name) # 检查目标文件是否存在,避免报错 if os.path.isfile(file_b): # 执行你的处理逻辑,比如合并文件 # MY FUNCTION THAT DOES OTHER STUFF print(f"处理配对:{file_a} <-> {file_b}")
方案2:先筛选共同文件名(更严谨)
如果两个目录可能存在非共同文件,先找出两者都有的文件名再处理,避免无效操作:
import os patha = "/folder1" pathb = "/folder2" # 分别获取两个目录下的txt文件名集合 files_in_a = {f for f in os.listdir(patha) if f.lower().endswith('.txt')} files_in_b = {f for f in os.listdir(pathb) if f.lower().endswith('.txt')} # 取交集得到共同文件名 common_files = files_in_a.intersection(files_in_b) for fname in common_files: file_a = os.path.join(patha, fname) file_b = os.path.join(pathb, fname) # 执行你的处理逻辑 # MY FUNCTION THAT DOES OTHER STUFF print(f"处理配对:{file_a} <-> {file_b}")
方案3:并发处理实现
如果需要提升效率,用concurrent.futures实现多线程并发处理:
import os from concurrent.futures import ThreadPoolExecutor patha = "/folder1" pathb = "/folder2" def process_file_pair(fname): """定义单个文件对的处理逻辑""" file_a = os.path.join(patha, fname) file_b = os.path.join(pathb, fname) # 示例:读取两个文件内容并合并写入新文件 with open(file_a, 'r') as fa, open(file_b, 'r') as fb: content_a = fa.read() content_b = fb.read() with open(f"merged_{fname}", 'w') as fm: fm.write(content_a + "\n" + content_b) print(f"完成合并:merged_{fname}") # 获取共同文件名 files_in_a = {f for f in os.listdir(patha) if f.endswith('.txt')} files_in_b = {f for f in os.listdir(pathb) if f.endswith('.txt')} common_files = files_in_a & files_in_b # 启动线程池,并发处理所有配对文件 with ThreadPoolExecutor(max_workers=4) as executor: executor.map(process_file_pair, common_files)
以上方案都能解决嵌套循环导致的配对混乱问题,同时实现同名文件的精准关联与并发处理。
内容的提问来源于stack exchange,提问作者user18774110
相关产品推荐
相关产品推荐

