如何用Python字典批量搜索文本文件关键词并提取后续数值?
优化Python批量关键词提取并导出Excel的方案
我看你现在的代码已经能提取单个关键词的数值,但确实存在重复写关键词的问题,而且还需要把结果导出到Excel。下面我给你一套更灵活、可扩展的解决方案:
核心思路优化
- 消除关键词重复:把关键词和对应的提取规则(正则表达式)放在同一个字典里,不用在函数里重复硬编码关键词
- 批量处理所有关键词:遍历文本时一次性检查所有关键词,不用为每个关键词单独写函数
- 支持多种数值类型:自动识别整数、浮点数,或者通过正则规则指定
- 轻松导出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导出:用
pandas的to_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




