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 ETdata = {"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 30Beijing
处理嵌套字典和列表
复杂数据需递归函数。关键点:区分字典(建子元素)、列表(对每个项重复处理)、纯值(设为文本):
- 遇到字典:为每个键创建子元素,递归处理其值
- 遇到列表:为每个元素生成同名子节点(如
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 parseStringdata = {"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属性(如),设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优化技巧


