You need to enable JavaScript to run this app. Python Pandas 批量提取固定格式TXT键值对导出CSV的实现思路
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas 批量提取固定格式TXT键值对导出CSV的实现思路

适配统一排版文本的结构化提取实现方案

之前用逐行分割冒号的思路,碰到一行多键值对、断行排版的场景必然出现变量和值错配的问题。依托描述的variable : [ value ]固定排版特征,用全局正则匹配的方案可以一次覆盖所有复杂排版场景,不需要逐行拆分。

核心设计逻辑

  • 不做逐行读取切割,直接把单个文件的全量文本作为匹配对象,兼容变量名单独占一行、值换行出现的断行场景(比如示例里的Tissue volume单独成行的异常排版)
  • 用非贪婪匹配逐次定位完整的「变量名+冒号+方括号包裹的值」单元,哪怕同一行连续堆10组键值对,也能准确拆分,不会出现值和变量的错配
  • 对重复出现的同名变量(比如示例里多次出现的FVC Liters、FEV1 Liters),自动按出现顺序加列名后缀,把每个值拆分到独立列,避免值被覆盖

核心匹配规则

# 正则规则说明:
# 1. 匹配变量名时用非贪婪模式,碰到第一个冒号即停止,避免跨行抓取无关内容
# 2. 匹配环节自动跳过所有多余空白(空格、换行、制表符),适配排版的多空格间距、断行问题
# 3. 值的匹配碰到第一个右方括号即停止,不会把后续内容混进取值里
KV_PATTERN = re.compile(r"(?P<var>.+?)\s*:\s*\[\s*(?P<val>[^\]]+?)\s*\]")

可直接运行的全量处理代码

  • 依赖仅需要Python自带的正则处理库、pandas、路径处理库,无需额外安装第三方付费工具
import re
import pandas as pd
from pathlib import Path

# 初始化匹配规则
KV_PATTERN = re.compile(r"(?P<var>.+?)\s*:\s*\[\s*(?P<val>[^\]]+?)\s*\]")

def parse_single_txt(file_path: Path) -> dict:
    # 读取全量文件内容,不做逐行切割
    full_content = file_path.read_text(encoding="utf-8", errors="ignore")
    matched_items = KV_PATTERN.finditer(full_content)
    data_row = {}
    var_counter = {}  # 记录同名变量的出现次数,避免解析时值被覆盖
    for item in matched_items:
        var_name = item.group("var").strip()
        var_value = item.group("val").strip()
        # 过滤掉无效的空变量匹配(比如示例里开头没有变量名的空冒号结构)
        if not var_name:
            continue
        # 同名变量自动加序号后缀,拆分到独立列
        if var_name not in var_counter:
            var_counter[var_name] = 1
            col_key = var_name
        else:
            var_counter[var_name] += 1
            col_key = f"{var_name}_{var_counter[var_name]}"
        data_row[col_key] = var_value
    # 追加来源文件名,方便后续溯源排查
    data_row["source_file"] = file_path.name
    return data_row

if __name__ == "__main__":
    # 替换为你存放所有纯文本文件的文件夹路径
    target_txt_folder = Path("./your_txt_files_folder_path")
    all_parsed_records = []
    for txt_file in target_txt_folder.glob("*.txt"):
        try:
            parsed_row = parse_single_txt(txt_file)
            all_parsed_records.append(parsed_row)
        except Exception as e:
            print(f"文件 {txt_file.name} 解析失败:{str(e)}")
    # 导出CSV,用utf-8-sig编码保证Excel打开无乱码
    pd.DataFrame(all_parsed_records).to_csv("./extracted_structured_result.csv", index=False, encoding="utf-8-sig")

痛点适配验证

  • 断行场景:全文件匹配逻辑可以准确识别示例里Tissue volume单独占一行、下一行才是[ Normal RV ]的结构,不会漏匹配
  • 单行多键值对场景:非贪婪匹配机制会在每识别完一个完整的键值对单元后,从当前位置继续向后检索下一组结构,哪怕一行连续出现3-4个键值对,也能准确拆分,不会把一整行的内容当成单个变量
  • 重复变量场景:自动加列名后缀的逻辑,会把示例里多次出现的FVC Liters、FEV1 Liters对应的每个值拆到独立列,不会出现后值覆盖前值的问题

可选优化方向

  • 匹配环节增加空值判断,对长度为0的取值自动填充为NaN
  • 对解析结果做列名规整,统一去掉列名里的多余空格、特殊字符
  • 针对千份文件里的个别排版例外,可在正则规则里补充对应特殊场景的匹配逻辑

内容的提问来源于stack exchange,提问作者Won Chul Chung

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 08:06:06