小白的Python之路 day5 模块XML特点和用法
模块XML的特点和用法
一、简介
xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。
二、特点
xml的格式如下,就是通过<>节点来区别数据结构的:
<duoduo>#这里面的内容可以换
<country name="Liechtenstein">
<rank updated="yes">2</rank>
<year>2008</year>
<gdppc>141100</gdppc>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/>
</country> #观察可以发现实际上和字典的特性差不多
<country name="Singapore">
<rank updated="yes">5</rank>
<year>2011</year>
<gdppc>59900</gdppc>
<neighbor name="Malaysia" direction="N"/>
</country>
<country name="Panama">
<rank updated="yes">69</rank>
<year>2011</year>
<gdppc>13600</gdppc>
<neighbor name="Costa Rica" direction="W"/>
<neighbor name="Colombia" direction="E"/>
</country>
</duoduo>
三、XML的用法
xml协议在各个语言里的都 是支持的,在python中可以用以下模块操作xml
1、查询xml文档内容
 import xml.etree.ElementTree as ET
 tree = ET.parse("xmltest.xml")
 root = tree.getroot()
 print(root)    #获取根节点,也就是内存地址
 print(root.tag)  #根的名字
 # 遍历xml文档
 for country in root:
     print(country.tag, country.attrib)  #分别打印子节点名称和子节点属性
     for i in country:   #遍历子节点下的所有节点
         print(i.tag, i.text,i.attrib)  #打印子节点下节点的节点名,节点值,节点值的属性
     # 只遍历year节点
     for i in country.iter("year"):
         print("\t", i.tag, i.attrib, i.text)
 # 只遍历year 节点
 for node in root.iter('year'):
     print(node.tag, node.text)  #打印year的节点名和节点值
重点:
1、tag是返回节点名,attrib返回节点属性,text返回节点值
2、返回根节点用getroot()方法
3、只遍历某个节点,只需要用iter(节点名)方法
4、遍历找不到要找的只能继续往下遍历
2、修改xml文档内容
 import xml.etree.ElementTree as et
 tree = et.parse("xmltest.xml")
 root = tree.getroot()
 #修改year节点的值
 for node in root.iter("year"):
     new_year = int(node.text) + 1   #修改节点值
     node.text = str(new_year)    #修改后强制转换成字符串类型
     node.tag = "newyear"            #修改节点名
     node.set("duoduo",'')   #修改节点属性
 tree.write("xmltest1.xml")   #修改完成后,重新写入xml文件(可以是任何文件,包括原来的)
重点:
可以修改xml文件中的任何内容,包括本身的节点名,修改后一定要有写入xml文件的操作。
3、删除xml文档内容
 import xml.etree.ElementTree as et
 tree = et.parse("xmltest.xml")
 root = tree.getroot()
 #删除
 for country in root.findall("country"):  #找到第一层子节点(“具体对象”)
     rank = int(country.find("rank").text)   #找到子节点下的(“rank”)节点的节点值
     if rank > 50:
         root.remove(country)    #删除子节点
 tree.write("xmltest1.xml")    #重新写入xml文件
重点:
1、root.findall()从根节点只能根据第一层的子节点名查找,并且返回第一层子节点的内存地址,前面root定义什么区域,就查找什么区域
2、删除子节点用remove()方法
3、删除以后,一定要做重新写入新的xml文件操作
4、创建新的xml文件
 import xml.etree.ElementTree as et
 new_xml = et.Element("namelist")   #创建根节点
 #创建第一层子节点,后面参数依次是:父节点,子节点,子节点属性
 name = et.SubElement(new_xml,"name",attrib={"duoduo":"handsome"})
 #创建第二层子节点
 age = et.SubElement(name,"age",attrib={"check":"yes"})
 #设置第二层节点值
 age.text = ''
 sex = et.SubElement(name,"sex")
 sex.text = "man"
 #创建另外一个第一层子节点
 name2 = et.SubElement(new_xml,"name",attrib={"qianduoduo":"haoshuai"})
 #创建其第二层子节点
 age = et.SubElement(name2,"age")
 age.text = ''
 ET = et.ElementTree(new_xml)  #生成新的xml文档
 ET.write("test.xml",encoding="utf-8",xml_declaration=True)  #在新xml文件的开头自动添加:<?xml version='1.0' encoding='utf-8'?>
 et.dump(new_xml)  #在屏幕上打印生成的格式
重点:pycharm创建的xml直接就是一行,没有格式.
小白的Python之路 day5 模块XML特点和用法的更多相关文章
- 小白的Python之路 day5 configparser模块的特点和用法
		configparser模块的特点和用法 一.概述 主要用于生成和修改常见配置文件,当前模块的名称在 python 3.x 版本中变更为 configparser.在python2.x版本中为Conf ... 
- 小白的Python之路 day5 hashlib模块
		hashlib模块 一.概述 用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 二.算法的演 ... 
- 小白的Python之路 day5  logging模块
		logging模块的特点及用法 一.概述 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你 ... 
- 小白的Python之路 day5  python模块详解及import本质
		一.定义 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能) 本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test) 包:用来从逻辑上组织模块 ... 
- 小白的Python之路 day5 time,datatime模块详解
		一.模块的分类 可以分成三大类: 1.标准库 2.开源模块 3.自定义模块 二.标准库模块详解 1.time与datetime 在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时 ... 
- 小白的Python之路 day5 random模块和string模块详解
		random模块详解 一.概述 首先我们看到这个单词是随机的意思,他在python中的主要用于一些随机数,或者需要写一些随机数的代码,下面我们就来整理他的一些用法 二.常用方法 1. random.r ... 
- 小白的Python之路 day5 shelve模块讲解
		shelve模块讲解 一.概述 之前我们说不管是json也好,还是pickle也好,在python3中只能dump一次和load一次,有什么方法可以向dump多少次就dump多少次,并且load不会出 ... 
- 小白的Python之路 day5 re正则模块
		re正则模块 一.概述 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,要讲他的具体用法要讲一本书!它内嵌在Python中,并通过 re 模块实现.你可以为想要匹配的相应字符串 ... 
- 小白的Python之路 day5 os,sys模块详解
		os模块详解 1.作用: 提供对操作系统调用的接口 2.常用方法: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname" ... 
随机推荐
- Java自己动手写连接池三
			Java自己动手写连接池三,核心代码; package com.kama.cn; import java.sql.Connection;import java.util.ArrayList;impor ... 
- Python之禅及释义
			在python shell中敲 import this会触发一个彩蛋,神奇的打印下面一段话: The Zen of Python, 即python之禅, 1999年Tim Peters大牛总结的&qu ... 
- 01-java技术体系基础
			java体系基础 理论 编程语言: 系统级: C, C++, go, erlang ... 应用级: C#, Java, Python, Perl, Ruby, php 虚拟机: jvm(java虚拟 ... 
- Kill 进程
			动态杀各种进程,谨慎操作:事例 status='sleeping' --AUTHOR KiNg --DATE 2016-05-30 DECLARE @SPID INT ... 
- 关于 jar 包数据更新的问题
			参考: 人乐草心的博文 如果要更新一个 jar 包内文件的一些信息,又不想重新编译,发包,可以如下操作. Extract JAR file unzip 拆包方式 unzip xxx.jar [ -d ... 
- zabbix web监控模板
			问题关键:宏变量 {HOST.NAME} 配置 我直接在 Linux OS这个模板中添加的,都随意: 效果 加个报警 以上. 
- selenium WebDriver 八种定位方式源码
			/* * 多种元素定位方式 */ package com.sfwork; import java.util.List; import org.openqa.selenium.By; import or ... 
- 第一章:大数据 の Linux 基础 [更新中]
			本课主题 Linux 休系结构图 Linux 系统启动的顺序 Linux 查看内存和 CPU 指令 环境变量加载顺序 Linux 内存结构 Linux 休系结构图 Linux 大致分为三个层次,第一层 ... 
- PyQt4 的部件 -- CheckBox 单选框
			单选框具有两种状态:被选中或未被选中. 当用户选择或者取消选择时,单选框就会发射一个stateChanged()信号 # QCheckBox 单选框 # 本例创建一个用来改变窗口标题的单选框 impo ... 
- PyQt4 的事件与信号 -- 发射信号
			继承自QtCore.Qobject的对象均可以发射信号. 如果我们单击一个按钮,那么一个clicked()信号就会被触发. 以下代码将演示如果手动发射一个信号. import sys from PyQ ... 
