Python可用xml.etree.ElementTree将扁平CSV转为层级XML:先按country、province、city排序,再逐行构建嵌套节点,用字典缓存已创建的父节点,最后用minidom美化输出。

用Python将扁平CSV转为层级XML,关键在于明确数据的层级关系,并用xml.etree.ElementTree或lxml逐层构建节点。不需要外部库也能完成,但需提前设计好XML结构。
扁平CSV本身不含嵌套信息,所以必须根据业务逻辑定义“哪一列代表父级”、“哪些列属于同一子节点”。例如:
country,province,city,population
<countries></countries>,下分<country></country> → <province></province> → <city></city>(含population属性或子元素)若CSV中存在重复的country和province,说明它们是上级分组依据,需去重并按顺序嵌套。
推荐使用标准库xml.etree.ElementTree,避免依赖第三方。核心思路是:先建根,再对每行数据,逐级查找或创建对应层级的节点(如不存在就新建),最后追加叶子节点。
立即学习“Python免费学习笔记(深入)”;
<country></country>和<province></province>元素,避免重复创建country_name,检查是否已有对应<country></country>;没有则新建并加入根节点province_name在该<country></country>下找或建<province></province>
<city></city>(可带population文本或属性)追加到<province></province>
原始CSV顺序可能打乱层级逻辑,建议先用pandas或csv模块读取后按关键列排序:
sorted(rows, key=lambda x: (x['country'], x['province'], x['city']))country的数据连续,便于分组构建province为空),需决定跳过、归入默认组,或报错提示——这属于业务规则,代码中要显式处理ElementTree默认输出无缩进。要生成易读的XML,可用xml.dom.minidom美化:
ET.tostring(root, encoding='utf-8')获取字节流minidom.parseString(...).toprettyxml(indent=' ')
toprettyxml会在首行加XML声明,且可能产生空行,可简单过滤掉空白行不复杂但容易忽略。
以上就是如何用Python将扁平的CSV转换为层级化的XML的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号