Python——数据存储:XML操作

Stella981
• 阅读 473
  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 parsedoc = 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 dicttoxmlfrom xml.dom.minidom import parseStringimport osd = [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 xmltodictimport pprintf=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从菜鸟到高手》,作者:李宁
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
2年前
PhoneGap设置Icon
参考:http://cordova.apache.org/docs/en/latest/config\_ref/images.html通过config.xml中的<icon标签来设置Icon<iconsrc"res/ios/icon.png"platform"ios"width"57"height"57"densi
Stella981 Stella981
2年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Stella981 Stella981
2年前
Maven使用 国内镜像配置
Maven使用国内镜像配置  Maven  setting.xml中配置<repositories<repository<idnexus</id<namelocalprivatenexus</name
Stella981 Stella981
2年前
OFBiz 快速入门——续二
OFBiz快速入门——续二2011年03月17日星期四00:03OFBiz 快速入门2.5 创建一个文件,取名为(controller.xml),被OFBiz webapp控制器使用的。在没有额外增加功能时,这个文件内容非常的小与简单,如下:<?xml version"1.0" encoding"UTF8"?<siteco
Wesley13 Wesley13
2年前
Unity横屏
Android下发现Unity里面的Player设置,并不能完全有效,比如打开了自动旋转,启动的时候还是会横屏,修改XML添加以下代码<applicationandroid:icon"@drawable/ic\_launcher"                    android:label"@string/app\_name"
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这