Python批量文本正则匹配提取分存新文件结果累加问题求助
代码修改方案
根因:存储匹配结果的列表extracts_eds_upe定义在文件遍历循环的外部,处理完每个文件后没有清空列表,导致后续文件的匹配结果会累加之前所有文件的匹配内容。代码中extract_on变量无实际作用可以删除,且原输出逻辑增加的undo 前缀和预期输出不符,也需要调整。
修改后的完整代码如下:
import re import glob import os list_of_files = glob.glob('10.123.130*.txt') pattern = re.compile(r"^\S+ \S+ \S+ 205\d+.*$") output_dir = r'D:\Python Project\DRP\UPE' # 自动创建输出目录,避免路径不存在报错 os.makedirs(output_dir, exist_ok=True) for fileName in list_of_files: # 每个文件处理前初始化空列表,避免跨文件结果累加 extracts_eds_upe = [] with open(fileName, 'r', encoding='utf-8') as myfile: for line in myfile: if pattern.search(line): extracts_eds_upe.append(line.rstrip('\n')) output_path = os.path.join(output_dir, os.path.basename(fileName)) with open(output_path, 'w', encoding='utf-8') as mytext: for line in extracts_eds_upe: # 若实际需要保留undo前缀,可取消下一行注释,并删除当前的write(line)行 # mytext.write("undo ") mytext.write(line) mytext.write('\n')
核心修改点:
- 将匹配结果列表
extracts_eds_upe的初始化移动到文件遍历循环内部,每个文件处理前自动重置为空,彻底解决结果累加问题 - 新增输出目录自动创建逻辑,避免手动创建目录遗漏导致的报错
- 补充文件读写的编码指定,避免跨系统环境编码不一致导致的乱码问题
- 移除无用的
extract_on变量 - 默认去掉了输出的
undo前缀,和给出的预期输出一致,可根据实际需求按注释调整
内容的提问来源于stack exchange,提问作者saratoon J.
相关产品推荐
相关产品推荐

