Python按文件名分组合并文本文件问题(代码失效求助)
问题排查与修复方案
原代码存在的问题
- 语法错误:路径分割使用
\,Python中需转义为\\,或用os.path.basename()处理路径更安全,避免语法报错 - 匹配逻辑完全错误:
fnmatch的模式写反了,应该匹配以指定前缀开头的文件,而非排除该前缀 - 逻辑冗余混乱:外层循环每个文件都创建输出文件,会重复覆盖目标文件;且无论文件是否匹配当前前缀,都执行写入操作
- 未过滤输出文件:如果目标合并文件已存在,会被误纳入合并流程,导致重复写入
修复后的代码
import glob import os textfile_dir = "./your_target_dir/" # 替换为你的文件目录,注意末尾保留斜杠 # 1. 按前缀分组所有待合并文件 file_groups = {} for filepath in glob.glob(os.path.join(textfile_dir, "*.txt")): filename = os.path.basename(filepath) # 提取文件名前缀(下划线分割的第一部分) prefix = filename.split("_")[0].split(".")[0] # 跳过已生成的合并文件,避免循环写入 if filename == f"{prefix}.txt": continue # 将文件归入对应前缀分组 if prefix not in file_groups: file_groups[prefix] = [] file_groups[prefix].append(filepath) # 2. 遍历分组完成合并 for prefix, files in file_groups.items(): output_file = os.path.join(textfile_dir, f"{prefix}.txt") with open(output_file, "w", encoding="utf-8") as outfile: for file in files: with open(file, "r", encoding="utf-8") as infile: outfile.write(infile.read()) outfile.write("\n") # 可选:在每个文件内容末尾添加换行,区分不同源文件内容
代码说明
- 用
os.path.join()和os.path.basename()处理路径,避免跨平台兼容性问题和语法错误 - 先分组再合并,逻辑清晰,避免重复创建/覆盖目标文件
- 主动过滤已生成的合并文件,防止循环写入导致内容重复
- 指定编码为
utf-8,避免不同编码文件合并时出现乱码
内容的提问来源于stack exchange,提问作者ZKS
相关产品推荐
相关产品推荐

