You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将CSV转换为嵌套结构XML(无需Pandas)

CSV转嵌套XML的Python实现(无Pandas)

实现思路

  1. 先按id字段对CSV数据分组,把同一id对应的所有地址信息聚合到一起
  2. 基于分组后的数据生成XML,每个id对应一个<address>父节点,其下嵌套该id的所有地址条目

示例CSV内容

假设你的输入CSV文件input.csv内容如下:

id,addr_type,street,city
1,home,Main St,New York
1,work,Office Rd,Chicago
2,home,Park Ave,Los Angeles

修改后的代码

import csv
from collections import defaultdict

# 第一步:按id分组地址数据
address_groups = defaultdict(list)

with open('input.csv', 'r', encoding='utf-8') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    for row in csv_reader:
        # 提取当前行的id,剩余字段作为地址详情
        current_id = row.pop('id')
        address_groups[current_id].append(row)

# 第二步:生成嵌套XML
with open('output.xml', 'w', encoding='utf-8') as xml_file:
    xml_file.write('<?xml version="1.0" encoding="UTF-8"?>\n')
    xml_file.write('<root>\n')
    
    for record_id, addresses in address_groups.items():
        # 写入id对应的父address节点
        xml_file.write(f'  <address id="{record_id}">\n')
        
        # 写入该id下的所有地址条目
        for addr in addresses:
            xml_file.write('    <address_entry>\n')
            for field, value in addr.items():
                xml_file.write(f'      <{field}>{value}</{field}>\n')
            xml_file.write('    </address_entry>\n')
        
        xml_file.write('  </address>\n')
    
    xml_file.write('</root>')

生成的XML结果

运行代码后,output.xml的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <address id="1">
    <address_entry>
      <addr_type>home</addr_type>
      <street>Main St</street>
      <city>New York</city>
    </address_entry>
    <address_entry>
      <addr_type>work</addr_type>
      <street>Office Rd</street>
      <city>Chicago</city>
    </address_entry>
  </address>
  <address id="2">
    <address_entry>
      <addr_type>home</addr_type>
      <street>Park Ave</street>
      <city>Los Angeles</city>
    </address_entry>
  </address>
</root>

关键说明

  • 使用collections.defaultdict简化分组逻辑,无需手动判断id是否已存在于字典中
  • 先读取所有CSV数据并分组,再写入XML,确保同一id的所有地址都被聚合到同一个父节点下
  • 代码兼容CSV字段扩展,新增字段时无需修改XML生成逻辑
  • 添加了XML声明头,保证编码格式规范

内容的提问来源于stack exchange,提问作者Mr Peanutbutter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 04:05:31