如何使用Python将多个TXT文件内容提取并转换为pandas DataFrame
提取txt内容生成Pandas DataFrame实现方案
实现思路
- 两个txt文件都是结构化的键值对格式,我们可以通过匹配每行的固定前缀提取对应值
- 先封装单个txt文件的解析函数,统一提取公共配置、SVM不同惩罚系数C对应的准确率、总运行时间三类数据
- 收集所有文件的解析结果后直接转换为DataFrame结构即可
完整实现代码
import re import pandas as pd def parse_exp_txt(file_path): res = {} # 匹配SVM准确率的正则:捕获C值和对应的准确率 svm_pattern = re.compile(r'SVM Classification accuarcy scores \(C=([\d.]+)\): ([\d.]+)') # 匹配普通键值对的正则 kv_pattern = re.compile(r'^([^:]+):\s*(.+?)(\s*\(|$)') with open(file_path, 'r', encoding='utf-8') as f: lines = [line.strip() for line in f if line.strip()] for line in lines: # 匹配SVM准确率行 svm_match = svm_pattern.match(line) if svm_match: c_val = svm_match.group(1).replace('.', '_') res[f'svm_acc_c{c_val}'] = float(svm_match.group(2)) continue # 匹配总运行时间 if line.startswith('Total runtime:'): res['total_runtime'] = float(line.split(':')[1].strip().split(' ')[0]) continue # 匹配普通配置键值对 kv_match = kv_pattern.match(line) if kv_match: key = kv_match.group(1).strip() val = kv_match.group(2).strip() # 自动转换数值类型 if val.isdigit(): val = int(val) elif val.replace('.', '', 1).isdigit(): val = float(val) res[key] = val # 增加文件名标识方便后续区分 res['file_name'] = file_path return res # 依次解析两个目标文件 file_list = ['foo1.txt', 'foo2.txt'] all_data = [parse_exp_txt(f) for f in file_list] # 转换为Pandas DataFrame df = pd.DataFrame(all_data) # 可打印查看结果 print(df.head())
输出说明
生成的DataFrame每一行对应一个txt文件的全部参数,包含所有配置项、4种C值对应的SVM准确率、总运行时间、文件名标识字段,可直接用于后续的对比分析。
内容的提问来源于stack exchange,提问作者user3046211
相关产品推荐
相关产品推荐

