Python怎么把CSV数据转换成嵌套XML

月夜之吻
发布: 2025-12-22 09:14:02
原创
638人浏览过
Python将CSV转为嵌套XML的核心是明确嵌套规则:按字段值分组、构建父子树或固定模板;推荐用csv+xml.etree.ElementTree实现,需注意编码、转义及结构预定义。

"python怎么把csv数据转换成嵌套xml"

Python 将 CSV 转为嵌套 XML,核心是:读取 CSV 行数据 → 按逻辑分组(如按某列值归类)→ 构建层级结构 → 用标准库生成合规 XML。关键不在“能不能”,而在“怎么定义嵌套规则”——CSV 本身是扁平的,嵌套关系需你明确指定。

明确嵌套结构(先想清楚再写代码)

CSV 没有天然层级,必须人工约定规则。常见方式有:

  • 按字段值分组嵌套:例如 CSV 有 category, name, price,你想让每个 category 成为一个 <category></category> 元素,其下包含多个 <item></item>
  • 多级父子关系:如含 parent_idid 列,可构建成树形 XML(需递归或字典索引)
  • 固定模板嵌套:如每行对应一个 <record></record>,内部固定嵌套 <header></header> + <details></details> 子元素

csv + xml.etree.ElementTree 实现(推荐,无第三方依赖)

这是最轻量、最可控的方式。以下是一个按 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 代码:

"JoinMC智能客服"
JoinMC智能客服

JoinMC智能客服,帮您熬夜加班,7X24小时全天候智能回复用户消息,自动维护媒体主页,全平台渠道集成管理,电商物流平台一键绑定,让您出海轻松无忧!

"JoinMC智能客服" 193
查看详情 "JoinMC智能客服"
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  # 旧版本跳过
登录后复制

处理更复杂嵌套(如父子 ID 树)

若 CSV 含 id, parent_id, title,需构建树结构:

  • 先遍历所有行,用字典存 {id: element},同时记录每个节点的子节点列表
  • 再找 parent_id 为空或为 0 的节点作为根
  • 递归或循环将子元素 append 到父元素下

这种场景建议封装一个简单 Node 类或用 defaultdict(list) 存子关系,避免深度递归出错。

用 pandas + xml.etree(适合已有 DataFrame 流程)

如果你已用 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中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号