如何用Python将扁平的CSV转换为层级化的XML

来源:草根站长作者:又改需求头衔:程序员
导读:本期聚焦于小伙伴创作的《如何用Python将扁平的CSV转换为层级化的XML》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何用Python将扁平的CSV转换为层级化的XML》有用,将其分享出去将是对创作者最好的鼓励。

将扁平的CSV转换为层级化XML,本质是把二维表中的行与列映射成树形节点。Python自带csv与xml模块,可以不需要安装额外依赖就完成这件事。我们首先看一个典型的扁平CSV:每一行代表一条订单明细,同一个订单编号对应多条商品记录。

如何用Python将扁平的CSV转换为层级化的XML

准备示例数据

假设有以下orders.csv内容:

order_id,customer,product,price
1001,张三,苹果,5
1001,张三,香蕉,3
1002,李四,橙子,4

我们希望转换成按订单分层的XML,每个order包含customer与多个product子节点。

读取并分组CSV数据

使用csv.DictReader读取,并以order_id为键做分组:

import csv
from collections import defaultdict

groups = defaultdict(list)
with open('orders.csv', newline='', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        groups[row['order_id']].append(row)

print(groups)

构建层级化XML

利用xml.etree.ElementTree生成树结构,将分组后的数据写成嵌套元素:

import xml.etree.ElementTree as ET

root = ET.Element('orders')
for order_id, items in groups.items():
    order_elem = ET.SubElement(root, 'order', {'id': order_id})
    # 取首行中的客户名
    ET.SubElement(order_elem, 'customer').text = items[0]['customer']
    products = ET.SubElement(order_elem, 'products')
    for item in items:
        p = ET.SubElement(products, 'product')
        ET.SubElement(p, 'name').text = item['product']
        ET.SubElement(p, 'price').text = item['price']

tree = ET.ElementTree(root)
tree.write('orders.xml', encoding='utf-8', xml_declaration=True)

输出结果说明

上述代码会生成如下结构的XML文件:

<?xml version='1.0' encoding='utf-8'?>
<orders>
  <order id="1001">
    <customer>张三</customer>
    <products>
      <product>
        <name>苹果</name>
        <price>5</price>
      </product>
      <product>
        <name>香蕉</name>
        <price>3</price>
      </product>
    </products>
  </order>
  <order id="1002">
    <customer>李四</customer>
    <products>
      <product>
        <name>橙子</name>
        <price>4</price>
      </product>
    </products>
  </order>
</orders>

注意事项

  • 如果CSV含有复杂嵌套关系,可递归构建子元素。
  • 字段中若包含<, >, &等字符,ET会自动转义,无需手动处理。
  • 大文件建议使用迭代方式读写,避免一次性载入内存。

通过以上方法,你可以灵活地将任意扁平CSV根据业务规则转为层级化XML,且完全基于Python标准库实现。

PythonCSVXML修改时间:2026-07-25 17:18:19

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。