Python实现从文本文件匹配指定字符串及对应数值并导出CSV
解决方案:Python精准匹配字符串并导出对应数值到CSV
嘿,针对你需要从多行文本中精确匹配指定字符串、并将其与后续数值导出到CSV的需求,我整理了一套实用的实现方案,完全贴合你的场景:
核心思路
- 精准锁定目标字符串:用正则的单词边界(
\b)确保只匹配完整的目标内容,不会误抓像slit uniformity at power这种包含目标字符串的长句 - 捕获关联数值:匹配目标字符串后的
:分隔符,以及后续的浮点数值 - 批量处理文本行:逐行读取输入文件,收集所有符合要求的匹配结果
- 导出CSV格式:把收集到的
(匹配字符串, 数值)对写入CSV,分两列存储
完整代码实现
import re import csv # 这里定义你需要精确匹配的目标字符串列表,可按需修改或添加 TARGET_PATTERNS = ["NA", "slit uniformity"] def extract_matches_from_file(file_path): matched_results = [] # 为每个目标字符串构建安全正则,自动转义特殊字符避免匹配异常 regex_list = [rf'\b({re.escape(pattern)})\s*:\s*([\d.]+)' for pattern in TARGET_PATTERNS] # 合并多个正则为一个,提升大文件处理效率 combined_regex = re.compile('|'.join(regex_list)) with open(file_path, 'r', encoding='utf-8') as input_file: for line in input_file: # 查找当前行内所有符合条件的匹配项 line_matches = combined_regex.findall(line) # 处理每个匹配结果,提取有效键值对 for match_tuple in line_matches: # 找到非空的目标字符串(多正则组合下只有一个组有值) matched_str = next(item for item in match_tuple if item != "") # 提取对应的数值,转成float类型(需要字符串格式可去掉float()) matched_value = float(match_tuple[1] if matched_str == match_tuple[0] else match_tuple[3]) matched_results.append([matched_str, matched_value]) return matched_results def save_to_csv(results, output_file_path): with open(output_file_path, 'w', newline='', encoding='utf-8') as csv_file: csv_writer = csv.writer(csv_file) # 写入表头(不需要的话可删掉此行) csv_writer.writerow(["精确匹配字符串", "对应数值"]) # 写入所有匹配结果 csv_writer.writerows(results) if __name__ == "__main__": # 替换成你的输入文本文件路径 input_txt_path = "your_input.txt" # 替换成你想要输出的CSV文件路径 output_csv_path = "matched_results.csv" # 执行提取和导出操作 final_results = extract_matches_from_file(input_txt_path) save_to_csv(final_results, output_csv_path) print(f"搞定!匹配结果已经保存到 {output_csv_path}")
关键细节说明
re.escape():自动转义目标字符串里的正则特殊字符(比如.或*),避免这些字符被当作正则语法处理,保证匹配精准度\b单词边界:确保只有当目标字符串是完整独立单元时才触发匹配,比如不会把slit uniformity at power里的slit uniformity误判为有效结果- 多正则合并:把多个目标字符串的正则合并成一个,减少循环次数,处理大文件时效率更高
- 数值类型控制:代码里将数值转成了
float类型,如果需要保留原始字符串格式,去掉float()即可
测试验证
拿你提供的示例文本来说:
NA: 2.0 slit uniformity at power: 3.6 integrated slit uniformity at power: 4.7 slit uniformity: 8.6
运行代码后,输出的CSV内容会是:
精确匹配字符串,对应数值 NA,2.0 slit uniformity,8.6
完全符合你的预期需求!
内容的提问来源于stack exchange,提问作者sam shaw
相关产品推荐
相关产品推荐

