Python中用For循环解析XML生成Pandas DataFrame输出异常如何解决
问题根因
- 全局共用同一个
Data列表存储所有字段的取值,导致verID和User_name的内容被混存到同一个列表里,最终两列数据完全一致 dic["df{}".format(int)]语法错误:int是Python内置类型关键字,没有替换为循环变量num,所有数据都被覆盖写入同一个字典键,无法生成独立的df1、df2- 每append一个值就生成一次DataFrame,逻辑冗余且会重复覆盖存储结果
修复后的实现代码
from pathlib import Path import xml.etree.ElementTree as ET import pandas as pd data_folder = Path("C:/xxx") List_Object = ['verID','User_name'] # 预定义要提取的字段 # 初始化每个字段对应的独立存储列表 field_data = {field: [] for field in List_Object} # 遍历所有XML文件 for file in data_folder.rglob('*.xml'): tree = ET.parse(file) root = tree.getroot() # 逐个提取当前XML里的目标字段 for field in List_Object: # 若每个XML对应字段存在多个值,可换成findall循环提取 elem = root.find(field) field_data[field].append(elem.text if elem is not None else None) # 直接生成合并后的DataFrame,无需单独生成df1、df2再拼接 df_merge = pd.DataFrame(field_data) # 自定义输出列名,匹配期望格式 df_merge.columns = ['Ver', 'Column_2'] # 导出Excel df_merge.to_excel('output.xlsx', index=False)
调整说明
- 为每个预定义字段单独创建存储列表,避免不同字段的取值混存
- 简化循环逻辑:按文件遍历→逐个提取文件内所有目标字段→存入对应字段的列表,所有文件处理完成后再统一转DataFrame
- 去掉冗余的字典存df、单独拼接df的步骤,直接生成符合要求的合并表,输出结构和预期完全匹配
内容的提问来源于stack exchange,提问作者yl129
相关产品推荐
相关产品推荐

