Python将CSV转XML需读取CSV、构建嵌套XML结构并写入文件;推荐csv.DictReader与xml.etree.ElementTree组合,注意UTF-8编码、自动转义及避免字符串拼接。

Python将CSV文件转换为XML格式,核心是读取CSV数据、构建XML结构、写入文件。关键在于理解两者的结构差异:CSV是扁平表格,XML是嵌套树状结构,需人为定义元素层级和命名规则。
使用csv和xml.etree.ElementTree(标准库方案)
无需额外安装,适合简单转换。思路是逐行读取CSV,为每行创建一个XML元素,字段作为子元素或属性。
- 用csv.DictReader按列名读取,保证字段顺序清晰
- 用xml.etree.ElementTree创建根节点(如
),每行生成一个子节点 - 字段值作为子元素内容(不推荐直接作属性,除非是ID类标识字段)
- 最后调用tree.write()保存,建议加
encoding='utf-8'和xml_declaration=True
处理特殊字符与编码问题
CSV中含中文、引号、换行符时,ElementTree默认会自动转义(如&→&),无需手动处理;但必须确保CSV以UTF-8打开,否则中文会乱码。
- 读CSV时显式指定
encoding='utf-8-sig'(兼容带BOM的Excel导出文件) - 写XML时用
encoding='utf-8',并设xml_declaration=True生成 - 避免用字符串拼接XML,防止非法字符破坏结构
自定义XML结构与字段映射
实际应用中,XML标签名常与CSV列名不同,或需合并/拆分字段。可在循环中做逻辑处理:
立即学习“Python免费学习笔记(深入)”;
- 用字典映射列名:
xml_fields = {'name': 'fullName', 'age': 'personAge'} - 对日期字段格式化:
ET.SubElement(record, 'birthDate').text = datetime.strptime(row['dob'], '%Y-%m-%d').strftime('%Y%m%d') - 跳过空值字段:
if row['phone']: ET.SubElement(record, 'phone').text = row['phone']
用pandas + lxml(适合复杂或大数据场景)
若CSV较大或需清洗(去重、类型转换、条件过滤),先用pandas加载,再转为XML更灵活;lxml支持pretty打印和命名空间。
df = pd.read_csv('data.csv', encoding='utf-8-sig')- 遍历df行:
for _, row in df.iterrows():,同ElementTree方式构建节点 - 用
lxml.etree.tostring(root, pretty_print=True, encoding='utf-8')生成缩进XML - 注意lxml需
pip install lxml,非标准库










