You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现从文本文件匹配指定字符串及对应数值并导出CSV

解决方案:Python精准匹配字符串并导出对应数值到CSV

嘿,针对你需要从多行文本中精确匹配指定字符串、并将其与后续数值导出到CSV的需求,我整理了一套实用的实现方案,完全贴合你的场景:

核心思路

  1. 精准锁定目标字符串:用正则的单词边界(\b)确保只匹配完整的目标内容,不会误抓像slit uniformity at power这种包含目标字符串的长句
  2. 捕获关联数值:匹配目标字符串后的: 分隔符,以及后续的浮点数值
  3. 批量处理文本行:逐行读取输入文件,收集所有符合要求的匹配结果
  4. 导出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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:36:32