求助:用Python实现固定结构TXT数据提取与表格化转换
如何用Python批量转换老旧程序的特殊格式输出为表格?
我正在使用一款老旧程序,其批量查询结果的输出格式十分特殊。查询对象A、B、C的输出样例如下:
name : A ------ Group 1 p1 : 11 p2 : 12 Group 2 p3 : 23 p4 : 24 ====== name : B ------ Group 1 p1 : 11 p2 : 12 Group 2 p3 : 23 p4 : 24 ====== name : C ------ Group 1 p1 : 11 p2 : 12 Group 2 p3 : 23 p4 : 24
我希望将这些数据转换为列名为A、B、C,行名为p1、p2等的表格。我有初步思路但不知如何自动化实现:
- 以
======为分隔符将每个对象的内容拆分到单独的TXT文件; - 用Excel以
:为分隔符读取文件,得到含两列(p描述符与对应值)的CSV文件; - 将所有CSV文件合并为一个以对象为列、px为行的CSV文件。
由于对象数量达数百个,想请教如何用Python实现,求相关建议、技巧或方案。
解决方案:直接解析原始文本并生成目标表格
不需要拆分文件再合并,直接用Python一次性处理原始文本效率更高,步骤如下:
1. 核心思路
- 读取原始文件内容,按
======分割出每个对象的区块 - 遍历每个区块,提取对象名称(
name : X中的X)和所有pX : 值的键值对 - 将所有对象的键值对整理成字典,用
pandas生成目标格式的表格并保存为CSV
2. 代码实现
import pandas as pd # 读取原始数据文件(替换为你的文件路径) with open('原始输出.txt', 'r', encoding='utf-8') as f: content = f.read() # 按分隔符分割每个对象的区块,过滤空区块 blocks = [block.strip() for block in content.split('======') if block.strip()] # 存储所有对象的数据:key是对象名,value是{p1:值, p2:值...} data_dict = {} for block in blocks: lines = [line.strip() for line in block.split('\n') if line.strip()] obj_name = None params = {} for line in lines: # 提取对象名称 if line.startswith('name :'): obj_name = line.split(':', 1)[1].strip() # 提取参数行(以p开头的键值对) elif ' : ' in line and line.split(' : ')[0].strip().startswith('p'): key, value = line.split(' : ', 1) params[key.strip()] = value.strip() if obj_name and params: data_dict[obj_name] = params # 转换为DataFrame,转置后得到行是pX、列是对象名的表格 df = pd.DataFrame(data_dict).fillna('') # 保存为CSV文件 df.to_csv('转换结果.csv', encoding='utf-8-sig')
3. 关键技巧
- 避免中间文件:直接在内存中处理所有数据,省去创建数百个TXT/CSV文件的开销
- 鲁棒性处理:用
strip()去除多余空格,过滤空行,避免因格式小差异导致解析失败 - 灵活调整格式:如果需要行是对象名、列是pX的表格,只需将
pd.DataFrame(data_dict)改为pd.DataFrame(data_dict).T即可
4. 依赖说明
需要安装pandas库,执行命令安装:
pip install pandas
内容的提问来源于stack exchange,提问作者Mirk
相关产品推荐
相关产品推荐

