使用Python/ElementTree/pandas将XML转CSV时如何保留账号前导零
问题原因
- pandas创建DataFrame时会自动推断列数据类型,纯数字组成的账号会被识别为整数类型,自动丢失前导零
- 你看到的右对齐是Excel/WPS等表格软件打开CSV时,对数值类型的默认展示效果,CSV本身是纯文本文件没有对齐属性,只要把账号列强制设为字符串类型,软件打开时就会默认左对齐,同时保留前导零
修改后的脚本
import pandas as pd import xml.etree.ElementTree as ET # 解析XML文件获取根节点 xml_file = "C:\\Python Scripts\\test.xml" csv_file = "C:\\Python Scripts\\test.csv" xml_tree = ET.parse(xml_file) root = xml_tree.getroot() # 解析XML节点转换为字典列表 get_range = lambda col: range(len(col)) l = [{r[i].tag:r[i].text for i in get_range(r)} for r in root] # 创建DataFrame时指定AcctNr列为字符串类型,避免自动推断为数值 df = pd.DataFrame.from_dict(l, dtype={"AcctNr": str}) # 导出CSV,index=False可去掉默认生成的索引列,utf-8-sig编码避免Windows下Excel打开乱码 df.to_csv(csv_file, index=False, encoding='utf-8-sig')
补充说明
如果处理的XML字段不固定,无法提前指定账号列名,可以全局关闭类型推断,所有列都按原始字符串存储:
df = pd.DataFrame.from_dict(l, dtype=str)
用你提供的测试XML运行修改后的脚本,输出的CSV中AcctNr列会完整保留007,用表格工具打开时默认靠左对齐,不影响原有转换逻辑。
内容的提问来源于stack exchange,提问作者Lazza
相关产品推荐
相关产品推荐

