Python将CSV转为嵌套XML的核心是明确嵌套规则:按字段值分组、构建父子树或固定模板;推荐用csv+xml.etree.ElementTree实现,需注意编码、转义及结构预定义。

Python 将 CSV 转为嵌套 XML,核心是:读取 CSV 行数据 → 按逻辑分组(如按某列值归类)→ 构建层级结构 → 用标准库生成合规 XML。关键不在“能不能”,而在“怎么定义嵌套规则”——CSV 本身是扁平的,嵌套关系需你明确指定。
CSV 没有天然层级,必须人工约定规则。常见方式有:
category, name, price,你想让每个 category 成为一个 <category></category> 元素,其下包含多个 <item></item>
parent_id 和 id 列,可构建成树形 XML(需递归或字典索引)<record></record>,内部固定嵌套 <header></header> + <details></details> 子元素这是最轻量、最可控的方式。以下是一个按 category 分组的典型示例:
假设 CSV 文件 data.csv 内容如下:
立即学习“Python免费学习笔记(深入)”;
category,name,price electronics,Phone,999 electronics,Laptop,1299 books,Python Crash Course,39 books,Clean Code,45
目标 XML 结构:
<root>
<category name="electronics">
<item><name>Phone</name><price>999</price></item>
<item><name>Laptop</name><price>1299</price></item>
</category>
<category name="books">
<item><name>Python Crash Course</name><price>39</price></item>
<item><name>Clean Code</name><price>45</price></item>
</category>
</root>对应 Python 代码:
import csv
import xml.etree.ElementTree as ET
from collections import defaultdict
<h1>读 CSV 并按 category 分组</h1><p>groups = defaultdict(list)
with open('data.csv', newline='', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
groups[row['category']].append(row)</p><h1>构建 XML 树</h1><p>root = ET.Element('root')
for cat_name, items in groups.items():
cat_elem = ET.SubElement(root, 'category', attrib={'name': cat_name})
for item in items:
item_elem = ET.SubElement(cat_elem, 'item')
ET.SubElement(item_elem, 'name').text = item['name']
ET.SubElement(item_elem, 'price').text = item['price']</p><h1>写入文件(美化缩进可选)</h1><p>tree = ET.ElementTree(root)
tree.write('output.xml', encoding='utf-8', xml_declaration=True)</p><h1>(可选)添加缩进使 XML 可读(Python 3.9+ 可用 ET.indent)</h1><p>try:
ET.indent(root, space=' ')
except AttributeError:
pass # 旧版本跳过
若 CSV 含 id, parent_id, title,需构建树结构:
{id: element},同时记录每个节点的子节点列表parent_id 为空或为 0 的节点作为根这种场景建议封装一个简单 Node 类或用 defaultdict(list) 存子关系,避免深度递归出错。
如果你已用 pandas 读取 CSV,可直接基于 DataFrame 操作:
import pandas as pd
import xml.etree.ElementTree as ET
<p>df = pd.read_csv('data.csv')
root = ET.Element('root')</p><p>for _, row in df.iterrows():
record = ET.SubElement(root, 'record')
for col in df.columns:
child = ET.SubElement(record, col)
child.text = str(row[col])</p><p>ET.ElementTree(root).write('pandas_output.xml', encoding='utf-8', xml_declaration=True)
注意:这种方式是“行转平级 record”,如需真正嵌套,仍需先 groupby 或 apply 自定义函数构造子结构。
不复杂但容易忽略的是编码和特殊字符——XML 不允许 , <code>&, " 直接出现,xml.etree 会自动转义,但手动拼接字符串则需用 xml.sax.saxutils.escape()。另外,确保 CSV 用 utf-8 打开,避免中文乱码。
以上就是Python怎么把CSV数据转换成嵌套XML的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号