使用Python pandas读取xlsx内容并写入生成XML的问题求助
问题原因与修复方案
错误点梳理
- 核心错误1:XML元素对象被意外覆盖:你调用
ET.SubElement()创建XML节点对象后,立即将节点变量重新赋值为pandas读取的单元格值,丢失了XML节点引用,后续无法为节点赋值内容 - 核心错误2:日期类型未转换为字符串:pandas读取的datetime类型数据不能直接赋值给XML节点的
text属性,需要先转为字符串格式 - 冗余错误:重复导入
datetime模块、存在无效的DataFrame操作代码(__setitem__相关代码属于误写操作,无实际作用)
修正后可运行代码
import pandas as pd import datetime import json from xml.etree import ElementTree as ET # 读取Excel并处理日期格式,提前转成字符串适配XML要求 df = pd.read_excel('parser.xlsx') df['data autorizzazio'] = pd.to_datetime(df['data autorizzazio']).dt.strftime('%Y-%m-%d') # 注册命名空间 ET.register_namespace("CBIPaymentRequest","http://www.w3.org/2001/XMLSchema-instance") # 构建XML根节点结构 root = ET.Element("{http://www.w3.org/2001/XMLSchema-instance}CBIPaymentRequest") root1 = ET.SubElement(root,"GrpHdr") # 处理MsgId节点:保留节点对象,直接为text属性赋值 MsgId = ET.SubElement(root1,'MsgId') MsgId.text = str(df.loc[0].values[1]) print(MsgId.text) # 处理PROVA节点 Prova = ET.SubElement(root1,'PROVA') Prova.text = str(df.loc[0].values[5]) print(Prova.text) # 写入XML文件,指定编码避免非英文字符乱码 tree = ET.ElementTree(root) tree.write("pandas_output_test_1.xml", encoding='utf-8', xml_declaration=True)
补充说明
- 如果需要自定义日期输出格式,修改
dt.strftime()里的格式符即可,例如%Y-%m-%d %H:%M:%S可以输出带时分秒的完整日期 - 如果需要遍历Excel所有行生成对应XML节点,在外层添加for循环遍历df的每一行即可
- 写入XML时指定
encoding='utf-8'和xml_declaration=True可以避免中文、特殊字符乱码问题
内容的提问来源于stack exchange,提问作者Davide Ferlazzo
相关产品推荐
相关产品推荐

