Python批量解析不同Schema XML并合并为DataFrame方法
通用批量解析实现方案
你只需要把单文件解析逻辑封装成可复用函数,就能一次性处理任意数量同标签结构、不同Schema的XML文件,完全不需要重复编写解析代码。
核心思路
- 将单个XML文件的解析、列名提取、行数据读取、DataFrame生成逻辑封装为独立函数,适配任意列定义的同结构文件
- 整理所有待解析文件的路径为列表,循环调用解析函数批量生成DataFrame
- 利用pandas 自动对齐列的特性,直接合并所有DataFrame,不同文件独有的列会自动补全缺失值
实现代码
import pandas as pd import xml.etree.ElementTree as et from pathlib import Path def parse_letada_xml(file_path: str | Path) -> pd.DataFrame: """解析单个LETADA-LOOK_TYP结构的XML文件,返回对应DataFrame""" rows = [] tree = et.parse(file_path) root = tree.getroot() # 遍历所有LETADA-LOOK_TYP节点(兼容单文件多节点的情况) for typ_node in root.findall("LETADA-LOOK_TYP"): # 提取列名:先去除首尾空白,再按任意空白分割,兼容空格、制表符、多空格场景 col_text = typ_node.find("COLUMNS").text.strip() columns = col_text.split() # 提取所有数据行 for data_node in typ_node.findall("DATA"): row_text = data_node.text.strip() row = row_text.split() rows.append(row) # 如需标记数据来源,可打开下面这行注释 # df = pd.DataFrame(rows, columns=columns).assign(source_file=Path(file_path).name) df = pd.DataFrame(rows, columns=columns) return df if __name__ == "__main__": # 把所有待解析的XML文件路径填到这个列表里,支持任意数量 file_list = [ "file1.xml", "file2.xml", "file3.xml" # 后续新增文件直接往这里加路径就行,不用改解析逻辑 ] # 批量解析所有文件 df_list = [parse_letada_xml(file) for file in file_list] # 合并所有结果,重置索引 final_df = pd.concat(df_list, ignore_index=True)
优化点说明
- 列和行的文本分割使用不带参数的
str.split(),会自动匹配任意数量的空白字符(空格、制表符),同时提前用strip()清理首尾多余空白,比固定按制表符分割兼容性更强,不会出现空列名、列错位的问题 - 函数兼容单个XML文件内存在多个
LETADA-LOOK_TYP节点的场景,同时修复了原代码两次遍历根节点的冗余逻辑 - 打开注释的
source_file列配置后,可以直接看到每一行数据来自哪个源文件,方便数据校验 - 新增待解析文件时,只需要把文件路径加到
file_list列表中即可,不需要修改任何解析逻辑
内容的提问来源于stack exchange,提问作者srinath reddy
相关产品推荐
相关产品推荐

