同前缀编号文件名仅存首个需求下的Python代码异常排查
问题分析与解决方案
原代码问题
原代码存在两个核心问题:
- 逻辑错误:仅当当前文件与下一个文件前缀不同时才保存当前文件,导致同编号的第一个文件因与下一个文件前缀相同被跳过,反而错误保存了同编号的第二个文件
- 前缀提取不严谨:用
[0:2]截取前缀的方式无法适配多位数编号(如12_xxx),会导致编号提取错误
修正后的代码
filenames = [ '4_66\nNUC_66377\nAPPR\nWONDER', '4_66\nNUC_66377\nAPPR\nCOT', '8_21\nAKRO\nNUT\nAMY' ] processed_ids = set() for filename in filenames: # 准确提取下划线前的编号:先取文件名第一行,再按下划线分割 first_line = filename.split('\n')[0] file_id = first_line.split('_')[0] if file_id not in processed_ids: # 仅保存同编号的首个文件 with open(f'./{filename}.txt', 'w') as file: file.write('111') processed_ids.add(file_id)
代码说明
processed_ids集合用于记录已处理过的文件编号,避免重复保存同编号的文件- 通过
split('\n')[0]提取文件名的第一行(编号所在行),再用split('_')[0]准确获取下划线前的编号,适配多位数编号场景 - 遍历过程中,仅当编号未被处理时才保存当前文件,确保同编号的文件只保留首个
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

