三十二、python操作XML文件
'''
XML:模块
|
xml总结 1、解析 root,Element,type 3、重新写入 4、创建xml |
xx.find(xxx):获取第一个寻找到的子节点
xx.findtext(xxx):获取到第一个找到的子节点的内容
xx.findall(aaa):获取所有的aaa节点
xx.tag:标签名
xx.text:子节点的内容
xx.attrib:子节点的属性
xx.makeelement(xxx):创建一个新的节点,仅为创建
ET.ElementTree(xxx.xml):生成文档对象
xx.append(son):为当前节点添加个子节点
xx.iter(aaa):获取指定节点,并为之创建一个迭代器for循环
xx.iterfind(aaa):获取指定节点,并为之创建一个迭代器for循环
xx.get(aa):获取当前节点xx中属性aa(key)的值
xx.set(key,value):设置当前节点的属性值,最后再write写入文件
xx.keys():获取当前节点所有属性的keys,返回列表
xx.items():获取当前节点的所有属性值,每对属性都是键值对
xx.itertext():获取当前节点中子孙节点的所有内容,并返回一个迭代器,for
'''
1.检测qq是否在线
from xml.etree import ElementTree as ET
import requests
response=requests.get('http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=55465165')
response.encoding="utf-8"
result=response.text
print(result)
e=ET.XML(result)
print (e.text)
if e.text=="Y":
print("在线")
else:
print("离线")
------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://WebXml.com.cn/">Y</string>
Y
在线
------------------------------------------------------------------
2.列车时刻表
#读取xml中的内容
import requests
from xml.etree import ElementTree as ET
response=requests.get('http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx/getDetailInfoByTrainCode?TrainCode=K234&UserID=')
response.encoding="utf-8"
result=response.text
print(result)
e=ET.XML(result)
print (e.text)
for i in e.iter("TrainDetailInfo"):
print(i.find("TrainStation").text,i.find("ArriveTime").text,i.tag,i.attrib)
-----------------------------------------------------------------------------
上海(车次:K234\K235) None TrainDetailInfo {'{urn:schemas-microsoft-com:xml-diffgram-v1}id': 'TrainDetailInfo1', '{urn:schemas-microsoft-com:xml-msdata}rowOrder': '0', '{urn:schemas-microsoft-com:xml-diffgram-v1}hasChanges': 'inserted'}
昆山 11:44:00 TrainDetailInfo {'{urn:schemas-microsoft-com:xml-diffgram-v1}id': 'TrainDetailInfo2', '{urn:schemas-microsoft-com:xml-msdata}rowOrder': '1', '{urn:schemas-microsoft-com:xml-diffgram-v1}hasChanges': 'inserted'}
苏州 12:12:00 TrainDetailInfo {'{urn:schemas-microsoft-com:xml-diffgram-v1}id': 'TrainDetailInfo3', '{urn:schemas-microsoft-com:xml-msdata}rowOrder': '2',
-----------------------------------------------------------------------------
3.
#打开本地的xml文件,并读取内容(只能读取,不能修改)
############ 解析方式一 ############
res_xml=ET.XML(open("first.xml","r",encoding="utf-8").read())
print(res_xml)
for i in res_xml.iter('country'):
print (i.tag,i.attrib,i.find("rank").text,i.find("gdppc").text)
---------------------------------------------------------------------------
<Element 'data' at 0x0000017EE58003B8>
country {'name': 'Liechtenstein'} 2 141100
country {'name': 'Singapore'} 5 59900
country {'name': 'Panama'} 69 13600
---------------------------------------------------------------------------
############ 解析方式二 ############
#并修改其中的内容
# 直接解析xml文件
tree=ET.parse("first.xml")
print (tree)
# 获取xml文件的根节点
root=tree.getroot()
print(root) for i in root.iter("year"):
print(i.tag,i.attrib,i.text)
#让year的值自增1
new_year=int(i.text)+1
print(new_year)
#自增1后赋值给i.text
i.text=str(new_year)
#更改或增加year的属性值
i.set('name','nian')
i.set('age', '18')
#删除属性值
del i.attrib['name'] tree.write("first.xml")
---------------------------------------------------------------------------
<xml.etree.ElementTree.ElementTree object at 0x0000017EE6180668>
<Element 'data' at 0x0000017EE615F6D8>
year {'age': '18'} 2033
2034
year {'age': '18'} 2036
2037
year {'age': '18'} 2036
2037
---------------------------------------------------------------------------
4.getroot中的方法
'''
['__class__', '__copy__', '__deepcopy__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'attrib', 'clear', 'extend', 'find', 'findall', 'findtext', 'get', 'getchildren', 'getiterator', 'insert', 'items', 'iter', 'iterfind', 'itertext', 'keys', 'makeelement', 'remove', 'set', 'tag', 'tail', 'text']
tag
attrib
find
set
iter
set
get
'''
tree=ET.parse("first.xml")
root=tree.getroot()
print(dir(root)) '''
5.创建xml文档
'''
5.1创建方式一:
from xml.etree import ElementTree as ET # 创建根节点 xml_declaration=True:自动会在xml的顶部加上“<?xml version='1.0' encoding='utf-8'?>” |
5.2创建方式二
from xml.etree import ElementTree as ET # 创建根节点 |
5.3创建方式三
#创建根节点 |
'''
6.xml补充:
'''
6.1使用makeelement创建一个节点
append()追加至某个节点
from xml.etree import ElementTree as ET #打开xml文件
tree=ET.parse("first.xml")
#获取根节点
root=tree.getroot()
print(root,root.tag,root.attrib,root.text) #创建节点makeelement,创建一个element对象
son=root.makeelement("kk",{'a1':'222'})
print(son)
son.text="666"
sub_son=son.makeelement("vv",{'a2':'888'})
#为当前节点追加一个子节点
root.append(son)
son.append(sub_son)
#写入文件
#tree.write("first.xml",short_empty_elements=False)
print("---------------------------------------------------------------------------------------") '''
6.2其他创建节点方式,ET.Element()
'''
ele1=ET.Element("p1",{'a3':'333'})
ele2=ET.Element("p2",{'a4':'444'})
son.append(ele1)
ele1.append(ele2) #tree.write("first.xml") print("---------------------------------------------------------------------------------------") '''
6.3 tree:
对象都是有类创建,对象所有的功能都与其相关的类中
1.ElementTree类创建,ElementTree(xxx)
2.getroot()获取xml的根节点
3.write()内存中xml写入文件中
'''
from xml.etree.ElementTree import ElementTree
from xml.etree.ElementTree import Element
tree=ET.parse("first.xml")
print(tree,type(tree))
root=tree.getroot()
print(root,type(root)) print("---------------------------------------------------------------------------------------")
7.两种修改xml文件方式
A、字符串形式打开
from xml.etree import ElementTree as ET ############ 解析字符串方式打开 ############ # 打开文件,读取XML内容 |
B、以解析文件打开
from xml.etree import ElementTree as ET ############ 解析文件方式 ############ # 直接解析xml文件 |
8.保存xml右缩进
''' |
三十二、python操作XML文件的更多相关文章
- python操作xml文件
一.什么是xml? xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. abc.xml <?xml version="1.0&q ...
- 如何用python操作XML文件
备注: 基于python3 背景:在统计覆盖率的时候希望绕属性name为test的节点 具体实现源码如下所示,基本都是基于节点属性操作的,当然也就可以基于tag等其他标签去做,可根据需要调整 from ...
- 三十二:WEB漏洞-文件操作之文件下载读取全解
文件下载读取 原路,检测,利用,修复 利用 数据库配置文件下载或者读取后续 接口密钥信息文件下载或者读取后续 文件名,参数值,目录符号 read.xxx?filename= down.xxx?file ...
- geotrellis使用(三十二)大量GeoTiff文件实时进行TMS服务
前言 在上一篇文章中我讲了如何直接将Geotiff文件发布为TMS服务,在其中只讲了单幅Geotiff的操作,其实单幅这种量级的数据对Geotrellis来说就是杀鸡焉用牛刀,Geotrellis针对 ...
- geotrellis使用(三十二)大量GeoTiff文件实时发布TMS服务
前言 在上一篇文章中我讲了如何直接将Geotiff文件发布为TMS服务,在其中只讲了单幅Geotiff的操作,其实单幅这种量级的数据对Geotrellis来说就是杀鸡焉用牛刀,Geotrellis针对 ...
- 学以致用三十二-----python中函数的括号使用
一直以来对python中函数括号的使用,有点分不清楚,到底什么时候用括号,什么时候不用括号,造成了很大看困惑. 今天来总结下. class aaa(): y = 'you' def __init__( ...
- 三十二 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy的暂停与重启
scrapy的每一个爬虫,暂停时可以记录暂停状态以及爬取了哪些url,重启时可以从暂停状态开始爬取过的URL不在爬取 实现暂停与重启记录状态 1.首先cd进入到scrapy项目里 2.在scrapy项 ...
- 孤荷凌寒自学python第三十九天python 的线程锁Lock
孤荷凌寒自学python第三十九天python的线程锁Lock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 当多个线程同时操作一个文件等需要同时操作某一对象的情况发生时,很有可能发生冲突, ...
- (转载)Android项目实战(三十二):圆角对话框Dialog
Android项目实战(三十二):圆角对话框Dialog 前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对话 ...
随机推荐
- Gym 101986D Making Perimeter of the Convex Hull Shortest(凸包+极角排序)
首先肯定是构造一个完整的凸包包括所有的点,那么要使得刚好有两个点在外面,满足这个条件的只有三种情况. 1.两个在凸包上但是不连续的两个点. 2.两个在凸包上但是连续的两个点. 3.一个在凸包上,还有一 ...
- solr集群搭建(SolrCloud)
SolrCloud(solr 云)是 Solr 提供的分布式搜索方案,当你需要大规模,容错,索引量很大,搜索请求并发很高时可以使用SolrCloud.它是基于 Solr 和Zookeeper的分布式搜 ...
- C++实现简单的日志记录
C++实现简单的日志记录 //dlogger.h #ifndef DLOGGER_H #define DLOGGER_H #include <iostream> #include < ...
- Solr知识点摘录
1.Solr和Lucene区别: 2.Solr的下载与安装 3. 4. 5. 6.Solr基础 7. 8.Solr索引操作 9. 10.
- python 模块发布及使用
将模块(此处名为nester)写好后,与setup.py放入同一个文件夹中: //setup.py from distutils.core import setup setup( name=" ...
- 一、ASP.NET Iframework_SignalR永久连接类(v2)
一.新建项目,选MVC项目默认 添加mvc文件夹和核心引用 二.添加SignaIR包 SignalR的准备:NuGet包管理器搜索:工具——>库程序包管理器——>Microsoft.Asp ...
- centos7 安装 tesseract4.1
官网大法好,其他方法需要装好多依赖,还没安装成功... yum-config-manager --add-repo https://download.opensuse.org/reposito ...
- 缓存promise技术不错哦
1. pageManager.js const promiseList = {}; module.exports = { putData: function(pageName,data){ promi ...
- Azure IoT 技术研究系列3
上篇博文中我们将模拟设备注册到Azure IoT Hub中:我们得到了设备的唯一标识. Azure IoT 技术研究系列2-设备注册到Azure IoT Hub 本文中我们继续深入研究,设备到云.云到 ...
- QQ输入法用户评价
1.用户界面 用户界面简洁,并且可以随用户喜好自己更换,人性化,优化性比较大 2.记住用户选择 当输入一个字时,下一次输入这个拼音第一位的字就是上一次,或者使用次数最多的字.假如所使用的的字在后边,输 ...