如何修改Python代码以遍历目录中所有指定TXT文件执行操作?
问题分析
你的代码存在两个核心问题:
- 变量不匹配:循环中通过
enumerate得到的i是从42开始的序号,但你却用f'{i}.txt'指定要处理的文件,完全忽略了glob遍历到的file变量。这会导致你处理的文件和实际遍历到的文件脱节,甚至因文件不存在抛出异常终止循环。 - 文件顺序不可控:
glob.glob("*.txt")返回的文件列表顺序依赖系统,不一定是按40、41、42...的数字顺序排列,可能导致处理顺序混乱。
修改方案
方案1:处理所有TXT文件(不严格要求顺序)
直接使用遍历到的file变量获取文件名,同时从文件名中提取数字作为结果文件的编号:
import glob # 遍历所有txt文件 for file in glob.glob("*.txt"): # 从文件名中提取数字部分(比如从"40.txt"得到"40") file_num = file.split('.')[0] # 加载当前文件 pipeline.load('txt', file) # 执行自定义函数 pipeline.myfunction('myfunction', '1.png', file) # 保存结果,编号与原文件对应 pipeline.write(f'result{file_num}.csv')
方案2:按40到100的数字顺序处理文件
如果需要严格按数字顺序处理,先对文件列表按文件名的数字排序:
import glob # 获取所有txt文件,按文件名的数字部分排序 txt_files = sorted(glob.glob("*.txt"), key=lambda x: int(x.split('.')[0])) for file in txt_files: file_num = file.split('.')[0] pipeline.load('txt', file) pipeline.myfunction('myfunction', '1.png', file) pipeline.write(f'result{file_num}.csv')
方案3:保留原代码的i序号(仅当需要连续编号时)
如果你的result{i}.csv需要从42开始连续编号,而非对应原文件数字,那么要确保遍历所有文件,同时使用file变量加载文件:
import glob # 遍历所有txt文件,i从42开始计数 for i, file in enumerate(glob.glob("*.txt"), 42): pipeline.load('txt', file) pipeline.myfunction('myfunction', '1.png', file) pipeline.write(f'result{i}.csv')
关键说明
- 核心错误是你没有使用循环中实际遍历到的
file变量,而是错误地用i构造文件名,这会导致处理的文件与遍历到的文件不匹配,甚至触发异常终止循环。 - 如果原代码中仅处理了40.txt就停止,大概率是第一次循环中
f'{i}.txt'(即42.txt)不存在或加载失败,导致程序抛出异常退出。
内容的提问来源于stack exchange,提问作者LTE
相关产品推荐
相关产品推荐

