Python遍历文本文件并提取匹配信息的技术实现求助
我来帮你搞定这个文本提取的问题!先梳理下你的需求:从给定格式的文本文件里,提取每行的人名和对应行的目标数值(比如示例里的1365),最终得到['1365', 'Tom']这样的结果组合。
先说说你现有代码里的几个小问题:
re.research是拼写错误,正确的方法是re.searchparse_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))
代码说明
parse_line函数:用re.split(r'\s+', ...)处理多空格分隔的场景,确保分割出的字段都是有效内容,然后直接提取我们需要的两个字段。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.
相关产品推荐
相关产品推荐

