如何删除文本文件前6行并将剩余XML结构数据转换为CSV格式
纯文本格式XML数据转CSV操作指南
第一步:快速剔除文件前6行冗余内容
不需要手动打开文本编辑器逐行删除,直接用系统自带的命令行就能批量完成,全程保留原文件做备份不破坏原始数据:
- Linux/macOS 终端执行命令,从文件第7行开始截取内容输出到新文件:
tail -n +7 原始文件路径/待处理文本.txt > 去掉头部后的有效数据.txt - Windows PowerShell 对应执行命令,跳过前6行后导出新文件:
Get-Content "原始文件路径\待处理文本.txt" | Select-Object -Skip 6 | Out-File "去掉头部后的有效数据.txt"
注意:所有操作都要导出为新文件处理,不要直接覆盖原始文件,避免操作失误造成数据丢失。
第二步:提取目标标签属性生成CSV
核心逻辑就是把每个目标标签里,=左侧的属性名作为CSV表头,引号包裹的属性值作为对应单元格的内容,不需要安装重型的XML解析工具,用轻量代码就能兼容属性顺序不统一的场景:
- 写一段无第三方依赖的Python脚本,自动扫描所有目标标签的属性:
import csv import re # 读取剔除头部后的有效数据文件 with open("去掉头部后的有效数据.txt", "r", encoding="utf-8") as f: raw_lines = f.readlines() # 匹配所有PSX标签行,按需替换为你要提取的其他标签名 target_tag_pattern = re.compile(r'<PSX\s+(.*?)>') # 匹配标签内的 属性名="属性值" 结构 attr_extract_pattern = re.compile(r'(\w+)="(.*?)"') all_rows = [] all_attr_headers = set() for line in raw_lines: stripped_line = line.strip() tag_match = target_tag_pattern.search(stripped_line) if not tag_match: continue attr_str = tag_match.group(1) row_attrs = dict(attr_extract_pattern.findall(attr_str)) all_rows.append(row_attrs) all_attr_headers.update(row_attrs.keys()) # 自动生成表头,也可以按需手动排列列顺序 sorted_headers = sorted(all_attr_headers) # 导出为带BOM编码的CSV,Excel打开不会乱码 with open("导出的交易数据.csv", "w", encoding="utf-8-sig", newline="") as f: csv_writer = csv.DictWriter(f, fieldnames=sorted_headers) csv_writer.writeheader() csv_writer.writerows(all_rows) - 脚本运行逻辑自动兼容不同行PSX标签的属性差异:如果某一行缺少某个属性,对应单元格自动留空,不会出现列错位的问题。
常见操作提醒
- 不要直接用Excel打开原始XML纯文本文件,遇到字段带逗号、引号的场景很容易出现列错位,上述脚本导出的CSV会自动做转义处理,兼容字段内的特殊字符。
- 如果需要提取的是PSXList这类父标签的属性,只需要把脚本里的
target_tag_pattern匹配规则改成对应标签名即可,不需要调整其他逻辑。
内容的提问来源于stack exchange,提问作者Jonathan Carr
相关产品推荐
相关产品推荐

