当前位置: 首页 > news >正文

Python——数据存储:XML操作

  XML文件已被广泛使用在各种应用中,如Web、移动APP、桌面GUI应用等等,几乎都会有XML文件的身影。不过现在一般不会将大部分的应用数据用xml文件存储,但至少会使用XML文件保存一些配置信息。在Python中,需要导入XML模块或其子模块,并利用提供的API来操作XML文件。如,xml.etree.ElementTree模块,通过该模块的parse函数读取XML文件。
由于下面XML操作都需要用到XML文件,文件如下:
persons.xml文件的内容:

<?xml version="1.0" ?>
<persons>
    <item type="int">20</item>
<item type="str">names</item>
<item type="dict" uuid="123">
<salary type="int">2000</salary>
<age type="int">30</age>
<name type="str">Gell</name>
</item>
<item type="dict" uuid="45">
<salary type="int">3000</salary>
<age type="int">40</age>
<name type="str">Chen</name>
</item>
<item type="dict" uuid="167">
<salary type="int">4000</salary>
<age type="int">50</age>
<name type="str">Ling</name>
</item>
</persons>
以下介绍python语言对XML文件的具体操作。


一、读取与检索XML文件
from xml.etree.ElementTree import parse

doc = parse('./files/persons.xml')
for item in doc.iterfind('item'):
# 读取id节点的值
salary = item.findtext('salary')
# 读取name节点的值
age = item.findtext('age')
# 读取price节点的值
name = item.findtext('name')

type = item.get('type')
uuid = item.get('uuid')
print('type={}'.format(type))
print('uuid={}'.format(uuid))
print('salary={}'.format(salary))
print('age', '=', age)
print('name', '=', name)
print('-----------------')

二、字典转成XML字符串
import dicttoxml
from xml.dom.minidom import parseString
import os

d = [20,'names',
{'name':'Gell','age':30,'salary':2000},
{'name':'Chen','age':40,'salary':3000},
{'name':'Ling','age':50,'salary':4000}
]
bxml = dicttoxml.dicttoxml(d,custom_root='persons')
xml = bxml.decode('utf-8')
print(xml)
print('----------------------')
dom = parseString(xml)
prettyxml = dom.toprettyxml(indent=' ')
print(prettyxml)

#将XML字符串保存到文件中。
os.makedirs('files',exist_ok=True)
f=open('files/persons.xml','w',encoding='utf-8')
f.write(prettyxml)
f.close()

三、XML字符串转为python字典
import xmltodict
import pprint

f=open('./files/persons.xml','rt',encoding='utf-8')
xml = f.read()
d=xmltodict.parse(xml)
print(d)
f.close()

pp = pprint.PrettyPrinter(indent=0)
pp.pprint(d)
 

参考文献:
1、《python从菜鸟到高手》,作者:李宁

转载于:https://www.cnblogs.com/chenhaiming/p/9881819.html

相关文章:

  • python 求助!
  • OpenGL step by step 38 : Skeletal Animation with Assimp
  • 顺为资本第四期美元基金募集完成 规模12.1亿美元
  • 【经验分享】:如何将PDF格式的文件进行翻译
  • 当奶猫来敲门
  • Jquery attr()方法 属性赋值和属性获取
  • [译] Google 工程师提升网页性能的新策略:空闲执行,紧急优先
  • 程序员的炼金术,如何用技术变现
  • java中如何使用Junit测试
  • 马斯克放大招!直逼高铁时速的240km h汽车隧道挖成了!
  • 书摘—松下幸之助全传
  • [洛谷P3567][POI2014]KUR-Couriers
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 以太坊分片:Overview and Finality
  • MySQL自定义函数递归查询父节点和子节点
  • 【comparator, comparable】小总结
  • 【React系列】如何构建React应用程序
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 2017-09-12 前端日报
  • golang中接口赋值与方法集
  • JS函数式编程 数组部分风格 ES6版
  • leetcode46 Permutation 排列组合
  • markdown编辑器简评
  • mysql_config not found
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 创建一种深思熟虑的文化
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 面试总结JavaScript篇
  • 前端面试之CSS3新特性
  • 前端面试之闭包
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 怎么把视频里的音乐提取出来
  • 转载:[译] 内容加速黑科技趣谈
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • ​secrets --- 生成管理密码的安全随机数​
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #QT(TCP网络编程-服务端)
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (1)常见O(n^2)排序算法解析
  • (4.10~4.16)
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (论文阅读30/100)Convolutional Pose Machines
  • (十) 初识 Docker file
  • (算法设计与分析)第一章算法概述-习题
  • (一一四)第九章编程练习
  • (转)四层和七层负载均衡的区别
  • ***检测工具之RKHunter AIDE
  • .NET delegate 委托 、 Event 事件