如何从每日文本文件按固定模式提取标签值并生成DataFrame?
需求:从固定格式文本文件提取指定标签值并转为DataFrame
我每天会收到若干格式固定的文本文件,文件内容采用「标签+值」的模式,值以引号结尾且每日不同。需要从中提取EQD+CN和RFF+BM标签对应的数值,转换为如下格式的DataFrame:
EQD_CN RFF_BM 0 3+5 MEDUD6352618 1 3+5 MEDUAE709954 2 ++4 null
注:部分文件可能缺失RFF+BM标签(标识ID),此时对应位置需填充null。我刚接触Python数据提取任务,求帮忙。
解决方案
步骤1:遍历并读取文件
指定存放文本文件的文件夹路径,遍历其中的目标文件(比如.txt格式),逐行读取每个文件的内容。
步骤2:匹配提取目标标签
用正则表达式匹配EQD+CN和RFF+BM对应的行,提取引号内的数值;如果某个文件找不到RFF+BM,就用None暂存(后续转为null)。
步骤3:生成DataFrame
把所有文件提取到的数据汇总成列表,再用pandas转换成指定格式的DataFrame,缺失值替换为null。
完整代码示例
import os import re import pandas as pd # 替换成你的文本文件所在文件夹路径 folder_path = "./daily_text_files" # 用来存储所有提取结果的列表 extracted_data = [] # 遍历文件夹里的所有文件 for file_name in os.listdir(folder_path): # 只处理txt文件,根据你的实际文件格式调整后缀 if file_name.endswith(".txt"): file_full_path = os.path.join(folder_path, file_name) eqd_value = None rff_value = None # 打开并读取文件内容 with open(file_full_path, 'r', encoding='utf-8') as f: for line in f: # 匹配EQD+CN的行,提取引号内的内容 eqd_match = re.search(r'EQD\+CN\s*=\s*"([^"]+)"', line.strip()) if eqd_match: eqd_value = eqd_match.group(1) # 匹配RFF+BM的行,提取引号内的内容 rff_match = re.search(r'RFF\+BM\s*=\s*"([^"]+)"', line.strip()) if rff_match: rff_value = rff_match.group(1) # 将当前文件的结果加入列表,缺失RFF+BM则留空(后续转null) extracted_data.append({ "EQD_CN": eqd_value, "RFF_BM": rff_value }) # 转换为DataFrame result_df = pd.DataFrame(extracted_data) # 将缺失值替换为显示的"null" result_df = result_df.fillna("null") # 打印结果或保存到文件 print(result_df) # 可选:保存为csv文件 # result_df.to_csv("extracted_result.csv", index=False)
代码说明
- 正则表达式
r'EQD\+CN\s*=\s*"([^"]+)"':匹配EQD+CN = "xxx"这类格式的行,\s*用来忽略标签和等号之间的空格,([^"]+)提取引号内的所有内容(直到下一个引号) - 每个文件单独处理,确保
EQD_CN和RFF_BM的对应关系正确 fillna("null")把pandas默认的NaN替换成你需要显示的null,如果不需要可以去掉这行
内容的提问来源于stack exchange,提问作者Tung Nguyen
相关产品推荐
相关产品推荐

