使用Python批量匹配合并对应编号的TXT文件生成新文件的技术问询
批量合并配对TXT文件的解决方案
很简单,我来帮你把单对文件的合并逻辑扩展成批量处理的版本,同时教你如何自动获取目录中的文件列表。
核心思路
我们需要:
- 自动找出目录中所有的
text_[数字].txt文件 - 从每个文件名中提取对应的数字编号
- 用这个编号找到匹配的
comments_[数字].txt文件 - 循环执行你已经写好的合并逻辑,生成对应的
feedback_[数字].txt
完整代码实现
这里提供两种提取编号的方式(正则表达式更稳健,字符串分割更简洁),你可以根据自己的需求选择:
方法1:使用正则表达式提取编号(推荐,适配复杂文件名格式)
import glob import re # 获取目录下所有text_开头的TXT文件 text_files = glob.glob("text_*.txt") # 遍历每个text文件 for text_file in text_files: # 用正则匹配文件名中的数字部分,比如从text_20.txt中提取"20" num_match = re.search(r'(\d+)', text_file) if num_match: file_num = num_match.group(1) # 构建对应的comments和feedback文件名 comments_file = f"comments_{file_num}.txt" feedback_file = f"feedback_{file_num}.txt" # 执行合并操作(复用你原有的单对合并逻辑) with open(feedback_file, "w", encoding='utf-8') as outfile: # 先写入text内容,再写入comments内容 for filename in [text_file, comments_file]: with open(filename, encoding='utf-8') as infile: outfile.write(infile.read()) print(f"已完成合并:{feedback_file}")
方法2:使用字符串分割提取编号(适合固定格式的文件名)
如果你的文件名格式绝对固定(比如永远是text_数字.txt),可以用更简单的字符串分割:
import glob import os text_files = glob.glob("text_*.txt") for text_file in text_files: # 分割文件名提取数字:text_0.txt -> split("_")得到["text", "0.txt"] -> 取第二个元素去掉后缀得到"0" file_num = text_file.split("_")[1].replace(".txt", "") comments_file = f"comments_{file_num}.txt" feedback_file = f"feedback_{file_num}.txt" # 可选:增加文件存在性检查,避免因文件缺失报错 if os.path.exists(comments_file): with open(feedback_file, "w", encoding='utf-8') as outfile: for filename in [text_file, comments_file]: with open(filename, encoding='utf-8') as infile: outfile.write(infile.read()) print(f"成功生成:{feedback_file}") else: print(f"警告:未找到对应编号的评论文件 {comments_file}")
关键细节说明
glob模块:用通配符text_*.txt可以快速筛选出所有目标文件,比手动列名单方便得多,而且能自动适配数量变化的情况。- 编码设置:打开文件时指定
encoding='utf-8'可以避免中文等非ASCII字符出现乱码问题,如果你的文件是其他编码(比如GBK),替换成对应的编码即可。 - 健壮性优化:方法2中的
os.path.exists()检查可以防止因意外缺失文件导致脚本崩溃,适合生产环境使用。
内容的提问来源于stack exchange,提问作者Daniel Hutchinson
相关产品推荐
相关产品推荐

