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

Python遍历文本文件并提取匹配信息的技术实现求助

我来帮你搞定这个文本提取的问题!先梳理下你的需求:从给定格式的文本文件里,提取每行的人名和对应行的目标数值(比如示例里的1365),最终得到['1365', 'Tom']这样的结果组合。

先说说你现有代码里的几个小问题:

  • re.research是拼写错误,正确的方法是re.search
  • parse_line函数存在语法错误(缺少闭合括号),而且逻辑只处理了行的一部分,没提取到目标数值
  • 循环里的条件判断太复杂,没必要用正则排除表头,直接跳过表头和分隔线行更简单
  • combine.append(l)的逻辑会重复添加同一个列表,达不到关联人名和目标值的效果

正确实现方案

根据你的文本结构,我们可以用更清晰的逻辑来处理:

文本结构回顾

person loan amount 1 month past due 2 month pass due


Tom 3000 3000 0.00 1365 100.00% 0.00%
... ...

我们需要:跳过表头和分隔线行,对每行数据提取第一列的人名和倒数第二列的数值,然后按[目标数值, 人名]的格式返回。

完整代码实现

import re

def parse_line(line):
    # 用正则分割任意数量的空格(处理文本里多空格分隔的情况)
    fields = re.split(r'\s+', line.strip())
    # 提取人名(第一个字段)和倒数第二个字段(目标数值)
    name = fields[0]
    target_value = fields[-2]
    return [target_value, name]

def extract_target_data(filepath):
    results = []
    with open(filepath, 'r') as f:
        skip_header = True
        for line in f:
            stripped_line = line.strip()
            # 跳过空行
            if not stripped_line:
                continue
            # 跳过表头和分隔线:遇到分隔线后,后续行开始解析
            if skip_header:
                if '----' in stripped_line:
                    skip_header = False
                continue
            # 解析数据行并加入结果列表
            parsed_result = parse_line(stripped_line)
            results.append(parsed_result)
    return results

# 使用示例
# filepath = "your_text_file.txt"
# print(extract_target_data(filepath))

代码说明

  1. parse_line函数:用re.split(r'\s+', ...)处理多空格分隔的场景,确保分割出的字段都是有效内容,然后直接提取我们需要的两个字段。
  2. extract_target_data函数:
    • 通过skip_header标记自动跳过表头和分隔线,不用硬编码行号,适配表头行数变化的情况
    • 跳过空行,避免解析无效内容
    • 把每行的解析结果收集到列表中,最终返回所有符合要求的结果组合

如果你的文本分隔线位置固定(比如第二行),也可以用行号判断来跳过:

def extract_target_data(filepath):
    results = []
    with open(filepath, 'r') as f:
        for idx, line in enumerate(f):
            stripped_line = line.strip()
            if idx < 2 or not stripped_line:
                continue
            parsed_result = parse_line(stripped_line)
            results.append(parsed_result)
    return results

这样就能准确得到你需要的['1365', 'Tom']格式的结果啦!

内容的提问来源于stack exchange,提问作者Wendy D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:29:13