如何用Python拆分.dat文件数据并导出含完整字段的Excel?
解决.dat文件多字段拆分并导出Excel的问题
你的原有代码用sep='[|,=]'同时按三种符号拆分,会把键(如0、1、4)和对应值拆分成独立列,再加上usecols只指定了3列,所以只能得到三个字段。要提取所有指定字段,需要分步骤处理数据结构:
- 每行数据先按
|拆分,提取前半部分的Time、Request,以及后半部分包含ISIN和键值对的字符串 - 从该字符串中分离出
ISIN Code和后续的键值对(如0=1000这类) - 将键值对转为字典,和前面的字段合并成完整的一行数据
修正后的代码
import pandas as pd # 处理单条数据的函数 def process_line(line): # 按|拆分每行,过滤空字符串 parts = [p.strip() for p in line.strip().split('|') if p.strip()] # 提取基础字段 result = { 'Time': parts[0], 'Request': parts[5] } # 分离ISIN Code和后续键值对 isin_kv_part = parts[9].split(',', 1) result['ISIN Code'] = isin_kv_part[0] # 解析键值对并添加到结果字典 kv_pairs = isin_kv_part[1].split(',') for pair in kv_pairs: key, value = pair.split('=', 1) result[key] = value return result # 读取文件并处理所有行 data = [] with open('TEST1.dat', 'r', encoding='utf-8') as f: for line in f: if line.strip(): data.append(process_line(line)) # 转换为DataFrame并导出Excel df = pd.DataFrame(data) df.to_excel('output_full.xlsx', sheet_name='sheet1', index=False)
代码说明
process_line函数负责单条数据的解析:- 按
|拆分后过滤空值,避免空字段干扰 - 直接从拆分结果中提取
Time和Request - 用第一个逗号拆分出
ISIN Code,剩余部分按逗号拆分键值对,再按=分离键和值存入字典
- 按
- 遍历文件所有行,收集处理后的完整数据
- 转换为DataFrame后导出,
index=False避免生成额外索引列
内容的提问来源于stack exchange,提问作者Mejbri Elias
相关产品推荐
相关产品推荐

