Python中怎么把字典数据写入XML文件

发布时间 - 2026-02-02 00:00:00    点击率:
Python中将字典写入XML需手动构建XML树:扁平字典用ElementTree逐键值创建子元素;嵌套结构需递归处理字典、列表和纯值;第三方库dicttoxml可自动处理并支持自定义选项。

Python中把字典写入XML文件,核心思路是:先将字典结构映射为XML树(常用xml.etree.ElementTree),再序列化保存。没有直接的“字典→XML”内置函数,需手动构建元素并递归处理嵌套结构。

用ElementTree构建简单字典的XML

适用于扁平字典(无嵌套、无列表)。手动创建根节点,遍历字典键值对生成子元素:

import xml.etree.ElementTree as ET

data = {"name": "Alice", "age": "30", "city": "Beijing"}

root = ET.Element("person") for key, value in data.items(): child = ET.SubElement(root, key) child.text = str(value)

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

生成的output.xml内容如下:



  Alice
  30
  Beijing

处理嵌套字典和列表

复杂数据需递归函数。关键点:区分字典(建子元素)、列表(对每个项重复处理)、纯值(设为文本):

  • 遇到字典:为每个键创建子元素,递归处理其值
  • 遇到列表:为每个元素生成同名子节点(如item或按上下文命名)
  • 遇到字符串/数字:设为当前元素的.text

示例函数:

def dict_to_xml(tag, d):
    elem = ET.Element(tag)
    for key, val in d.items():
        if isinstance(val, dict):
            child = dict_to_xml(key, val

) elem.append(child) elif isinstance(val, list): for item in val: child = dict_to_xml(key, item) # 列表项复用key作标签名 elem.append(child) else: child = ET.Element(key) child.text = str(val) elem.append(child) return elem

示例数据

data = { "book": { "title": "Python Guide", "author": ["Alice", "Bob"], "price": 49.99, "tags": [{"name": "programming"}, {"name": "beginner"}] } }

root = dict_to_xml("library", data) tree = ET.ElementTree(root) tree.write("book.xml", encoding="utf-8", xml_declaration=True)

使用第三方库简化(如dicttoxml)

安装:pip install dicttoxml

优点:自动处理嵌套、列表、类型转换;支持自定义根名、忽略空值等。

from dicttoxml import dicttoxml
from xml.dom.minidom import parseString

data = {"name": "Alice", "hobbies": ["reading", "coding"]}

xml = dicttoxml(data, custom_root="person", attr_type=False) dom = parseString(xml) with open("output.xml", "w", encoding="utf-8") as f: f.write(dom.toprettyxml(indent=" "))

注意dicttoxml默认给所有值加type属性(如reading),设attr_type=False可禁用。

注意事项和常见问题

  • XML标签名不能含空格、特殊字符或以数字开头——字典键需预处理(如替换空格为下划线)
  • 键名重复时(如列表中多个同名字典),ElementTree会生成多个同名子元素,符合XML规范
  • 中文需指定encoding="utf-8"并开启xml_declaration=True,避免乱码
  • 若字典含None,需提前转为空字符串或跳过,否则.text = None会报错


# python  # app  # 递归函数  # 常见问题  # 键值对  # elif  # pip  # xml  # 字符串  # 递归  # 类型转换  # 多个  # 设为  # 自定义  # 第三方  # 键值  # 遍历  # 下划线  # 适用于  # 报错 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  在线制作视频的网站有哪些,电脑如何制作视频短片?  如何在IIS管理器中快速创建并配置网站?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Laravel如何使用Collections进行数据处理?(实用方法示例)  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  ,交易猫的商品怎么发布到网站上去?  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  如何快速查询网址的建站时间与历史轨迹?  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  如何快速搭建虚拟主机网站?新手必看指南  Laravel如何实现数据库事务?(DB Facade示例)  iOS正则表达式验证手机号、邮箱、身份证号等  如何将凡科建站内容保存为本地文件?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  Python数据仓库与ETL构建实战_Airflow调度流程详解  深圳网站制作平台,深圳市做网站好的公司有哪些?  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  如何用VPS主机快速搭建个人网站?  如何在阿里云高效完成企业建站全流程?  Laravel如何实现本地化和多语言支持?(i18n教程)  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  Laravel怎么上传文件_Laravel图片上传及存储配置  如何快速建站并高效导出源代码?  如何快速生成ASP一键建站模板并优化安全性?  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  Linux网络带宽限制_tc配置实践解析【教程】  HTML 中动态设置元素 name 属性的正确语法详解  中山网站推广排名,中山信息港登录入口?  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  详解Android中Activity的四大启动模式实验简述  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  Laravel如何处理文件下载请求?(Response示例)  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  java获取注册ip实例  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  公司网站制作价格怎么算,公司办个官网需要多少钱?  Laravel如何实现API版本控制_Laravel版本化API设计方案  iOS中将个别页面强制横屏其他页面竖屏  Laravel观察者模式如何使用_Laravel Model Observer配置  Python图片处理进阶教程_Pillow滤镜与图像增强  如何在建站之星绑定自定义域名?  Swift中switch语句区间和元组模式匹配  青岛网站建设如何选择本地服务器?  如何解决hover在ie6中的兼容性问题  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧