You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Python字典批量搜索文本文件关键词并提取后续数值?

优化Python批量关键词提取并导出Excel的方案

我看你现在的代码已经能提取单个关键词的数值,但确实存在重复写关键词的问题,而且还需要把结果导出到Excel。下面我给你一套更灵活、可扩展的解决方案:

核心思路优化

  1. 消除关键词重复:把关键词和对应的提取规则(正则表达式)放在同一个字典里,不用在函数里重复硬编码关键词
  2. 批量处理所有关键词:遍历文本时一次性检查所有关键词,不用为每个关键词单独写函数
  3. 支持多种数值类型:自动识别整数、浮点数,或者通过正则规则指定
  4. 轻松导出Excel:用pandas库快速把提取结果导出成Excel文件

完整代码实现

首先确保你安装了pandas(如果没装的话,执行pip install pandas):

import re
import pandas as pd

def load_text_file(file_path):
    """读取文本文件内容,返回每行的列表"""
    with open(file_path, 'r', encoding='utf-8') as f:
        return f.readlines()

def extract_values(text_lines, keyword_rules):
    """
    批量提取文本中关键词对应的数值
    :param text_lines: 文本行列表
    :param keyword_rules: 关键词-正则模式字典
    :return: 提取结果字典,键为关键词,值为对应数值列表
    """
    results = {key: [] for key in keyword_rules}
    
    for line in text_lines:
        line = line.strip()  # 去除首尾空白
        for keyword, pattern in keyword_rules.items():
            if keyword in line:
                match = re.search(pattern, line)
                if match:
                    value_str = match.group()
                    # 尝试转换为数值类型
                    try:
                        if '.' in value_str:
                            value = float(value_str)
                        else:
                            value = int(value_str)
                        results[keyword].append(value)
                    except ValueError:
                        # 如果转换失败,记录原始字符串或跳过
                        results[keyword].append(None)
    return results

def export_to_excel(results, output_path):
    """把提取结果导出到Excel文件"""
    # 转换为DataFrame,方便导出
    df = pd.DataFrame.from_dict(results, orient='index').transpose()
    df.to_excel(output_path, index=False)
    print(f"结果已成功导出到 {output_path}")

# ---------------------- 主程序 ----------------------
if __name__ == "__main__":
    # 1. 定义关键词和对应的正则提取规则
    keyword_rules = {
        "His age is:": r"\d+",  # 匹配整数年龄
        "Height (cm):": r"\d+\.\d+",  # 匹配浮点数身高
        "Weight (kg):": r"\d+(\.\d+)?"  # 匹配整数或浮点数体重
    }
    
    # 2. 读取文本文件
    text_content = load_text_file("path_to_file.txt")
    
    # 3. 提取数值
    extracted_results = extract_values(text_content, keyword_rules)
    
    # 4. 导出到Excel
    export_to_excel(extracted_results, "extracted_values.xlsx")

代码说明

  • 关键词规则字典:你只需要在keyword_rules里新增关键词和对应的正则模式,不用修改其他代码,非常容易扩展
  • 数值类型自动转换:代码会自动判断提取到的字符串是整数还是浮点数,转换失败会记录None(你也可以根据需求改成其他处理方式)
  • Excel导出:用pandasto_excel方法,一行代码就能完成导出,生成的Excel文件结构清晰

示例文本测试

假设你的path_to_file.txt内容如下:

His age is: 25
Height (cm): 175.5
Weight (kg): 70
His age is: 30
Height (cm): 180.0
Weight (kg): 82.5

运行代码后,extracted_values.xlsx里会有三列:His age is:Height (cm):Weight (kg),对应每行的数值。

额外优化点(可选)

  • 如果你的文本很大,load_text_file可以改成逐行处理,不用一次性读入内存
  • 可以给正则模式加上边界匹配(比如r"\b\d+\b"),避免匹配到其他无关数字
  • 如果需要提取每个关键词的第一个匹配值而不是所有,只需要在找到第一个匹配后跳出循环即可

内容的提问来源于stack exchange,提问作者Wessowang

火山引擎 最新活动