Python批量解析XML文件并提取指定字段至文本文件
批量处理XML文件提取指定字段并导出结果
你提到的XML文件其实是有根节点<reiXml>的,不需要用无root节点的解析方案,直接用Python标准库的xml.etree.ElementTree就能轻松处理。下面是针对你两个问题的具体解决方案:
一、批量读取XML文件
借助os模块遍历目标目录,筛选出所有.xml后缀的文件。如果文件集中在同一文件夹,直接遍历即可;若存在子目录,可改用os.walk递归查找。
二、提取指定字段并写入结果文件
- 先定义需要提取的字段列表(按需调整);
- 逐个解析XML文件,提取目标字段的内容;
- 将文件名和提取到的数值按指定格式写入输出文件,保证列对齐。
完整代码示例
import os import xml.etree.ElementTree as ET # 配置参数 XML_DIR = "./xml_files" # 替换为你的XML文件实际存放目录 OUTPUT_FILE = "./result.txt" TARGET_FIELDS = ['An', 'Vc', 'A', 'Ht', 'CO2'] # 要提取的字段,按需补充到10个 def extract_xml_data(xml_path): """从单个XML文件提取指定字段内容""" tree = ET.parse(xml_path) root = tree.getroot() data = {} for field in TARGET_FIELDS: elem = root.find(field) data[field] = elem.text.strip() if elem else "" return data def main(): # 写入表头 header = " " + " ".join(TARGET_FIELDS) with open(OUTPUT_FILE, 'w', encoding='utf-8') as f_out: f_out.write(header + '\n') # 遍历处理所有XML文件 for filename in os.listdir(XML_DIR): if filename.endswith('.xml'): xml_path = os.path.join(XML_DIR, filename) file_data = extract_xml_data(xml_path) # 格式化行内容,保证列对齐 row_values = [file_data[field] for field in TARGET_FIELDS] row_line = f"{filename:<12}" + " ".join(f"{val:>8}" for val in row_values) f_out.write(row_line + '\n') # 可选:每处理1000个文件打印进度,避免卡顿 if int(filename.split('.')[0][-6:]) % 1000 == 0: print(f"已处理 {filename}") if __name__ == "__main__": main()
代码说明
- 替换
XML_DIR为你的XML文件实际路径; - 修改
TARGET_FIELDS为你需要提取的10个字段名称; - 通过字符串格式化的
<(左对齐)和>(右对齐)语法,保证输出格式和你要求的一致; - 按行写入文件,避免处理10万份文件时占用过多内存。
注意事项
- 若XML文件存在编码异常,可修改解析逻辑,显式指定编码:
with open(xml_path, 'r', encoding='utf-8') as f: tree = ET.parse(f) - 若部分文件缺少目标字段,代码会用空字符串填充,你可根据需求改为默认值(比如
0)。
内容的提问来源于stack exchange,提问作者energyMax
相关产品推荐
相关产品推荐

