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

Python文本文件数据提取代码仅提取部分行,求修改方案

问题分析与代码修改建议

原代码存在以下几个核心问题导致无法提取所有符合规则的行:

  1. 正则表达式匹配逻辑受限:FAU([^"]*)仅匹配FAU后直到第一个双引号的内容,若目标内容未用双引号包裹、或一行内存在多个FAU/AD项,会直接漏匹配。
  2. 无结果持久化:仅逐行打印匹配内容,未统一存储所有提取数据,后续无法复用。
  3. 异常处理过于宽泛:会掩盖文件读取之外的其他错误(如正则语法问题)。

修改后的代码

import re

fname = input("Enter the filename: ")
all_extractions = []  # 存储所有提取结果的列表

try:
    # 使用with语句自动管理文件句柄,避免资源泄漏
    with open(fname, 'r', encoding='utf-8') as fhand:
        for line in fhand:
            line = line.strip()
            # 根据实际格式选择对应的正则:
            # 场景1:字段值用双引号包裹(支持一行多个匹配)
            fau_matches = re.findall(r'FAU"([^"]*)"', line)
            ad_matches = re.findall(r'AD"([^"]*)"', line)
            
            # 场景2:字段值无引号,直到下一个标记(如FAU/AD)或行尾
            # fau_matches = re.findall(r'FAU\s*(.*?)(?=\s+AD|$)', line)
            # ad_matches = re.findall(r'AD\s*(.*?)(?=\s+FAU|$)', line)

            # 将匹配结果存入统一列表,标记字段类型
            if fau_matches:
                all_extractions.extend([("FAU", item) for item in fau_matches])
            if ad_matches:
                all_extractions.extend([("AD", item) for item in ad_matches])

    # 输出所有提取结果
    print("所有提取内容:")
    for tag, content in all_extractions:
        print(f"{tag}: {content}")

except FileNotFoundError:
    print("文件未找到,请检查文件名或路径是否正确")
except Exception as e:
    print(f"处理过程出错:{str(e)}")

关键修改说明

  1. 正则表达式优化:
    • 针对双引号包裹的字段:使用r'FAU"([^"]*)"',精准提取双引号内的内容,同时支持一行内多个FAU/AD项的匹配。
    • 针对无引号的字段:使用正向预查语法(?=\s+AD|$),匹配到下一个标记或行尾就停止,避免误匹配其他字段内容。
  2. 结果统一存储:用all_extractions列表保存所有提取项,方便后续写入文件、数据分析等操作。
  3. 异常处理细化:单独捕获FileNotFoundError,其他异常单独提示,避免掩盖未知问题。
  4. 资源管理优化:使用with语句自动关闭文件,避免手动管理文件句柄的疏漏。

调试建议

如果仍有漏匹配的情况,可以在循环中加入未匹配行的打印,快速定位格式问题:

# 在line.strip()后添加
if not fau_matches and not ad_matches:
    print(f"未匹配的行:{line}")

内容的提问来源于stack exchange,提问作者ravi.g teja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 21:12:18