返回顶部
首页 > 资讯 > 后端开发 > Python >三十二、python操作XML文件
  • 495
分享到

三十二、python操作XML文件

操作文件三十二 2023-01-31 02:01:24 495人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

''' XML:模块 xml总结 1、解析 str 文件 tree,ElementTree,type root,Element,type 2、操作 Element: tag,text,fin


'''
XML:模块

xml总结

1、解析
str
文件
tree,ElementTree,type

root,Element,type
2、操作
Element:
tag,text,find,iter,get,set...

3、重新写入
tree.write()
str没有tree--->ElementTree(root)
tree.write(xx,encoding='utf-8',xxx,xxx)

4、创建xml
Element(xx,xx)
5、缩进
6、命名空间


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


# 创建根节点
root = ET.Element("famliy")


# 创建子节点
son1 = ET.Element('son', {'name': 'a1'})
# 创建小儿子
son2 = ET.Element('son', {"name": 'a2'})

# 在子节点中创建子节点
grandson1 = ET.Element('grandson', {'name': 'a11'})
grandson2 = ET.Element('grandson', {'name': 'a12'})
#将字节点中的子节点追加到子节点中
son1.append(grandson1)
son1.append(grandson2)


# 将子节点追加到根节点中
root.append(son1)
root.append(son1)
#保存
tree = ET.ElementTree(root)
tree.write('oooo.xml',encoding='utf-8', short_empty_elements=False) 
#enccoding=utf-8保存内容中有中文时
short_empty_elements=False:不会自动加自闭(<vv a2="888"></vv>)

xml_declaration=True:自动会在xml的顶部加上“<?xml version='1.0' encoding='utf-8'?>

5.2创建方式二

from xml.etree import ElementTree as ET

# 创建根节点
root = ET.Element("famliy")


# 创建子节点1
# son1 = ET.Element('son', {'name': 'a1'})
son1 = root.makeelement('son', {'name': 'a1'})
# 创建子节点2
# son2 = ET.Element('son', {"name": 'a2'})
son2 = root.makeelement('son', {"name": 'a2'})

# 在子节点中创建子节点
# grandson1 = ET.Element('grandson', {'name': 'a11'})
grandson1 = son1.makeelement('grandson', {'name': 'a11'})
# grandson2 = ET.Element('grandson', {'name': 'a12'})
grandson2 = son1.makeelement('grandson', {'name': 'a12'})
#将子节点中的子节点追加到子节点中
son1.append(grandson1)
son1.append(grandson2)


# 把子节点追加到根节点中
root.append(son1)
root.append(son1)
#保存
tree = ET.ElementTree(root)
tree.write('oooo.xml',encoding='utf-8', short_empty_elements=False)

5.3创建方式三

#创建根节点
new_xml=ET.Element("namelist")

#创建根节点下的子节点1
name1=ET.SubElement(new_xml,"name",attrib={'a1':'aa1'})
#子节点下的子节点
age1=ET.SubElement(name1,"age",attrib={'a2':'aa2'})
sex1=ET.SubElement(name1,"sex")
sex1.text='66'

#创建子节点2
name2=ET.SubElement(new_xml,"name",attrib={'aa1':'aaa1'})
#创建子节点下的子节点
age2=ET.SubElement(name1,"age",attrib={'aa2':'aaa2'})
sex2=ET.SubElement(name1,"sex")
sex2.text='88'

new_year=ET.SubElement(name2,"year")
new_year.text='2018'
#保存
et = ET.ElementTree(new_xml)  #生成文档对象
et.write("test.xml", encoding="utf-8", xml_declaration=True, short_empty_elements=False)

'''
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内容
new_xml = open('first.xml', 'r').read()

# 将字符串解析成xml特殊对象,root代指xml文件的根节点
root = ET.XML(new_xml)

############ 操作 ############

# 顶层标签
print(root.tag)

# 遍历data下的所有country节点
for i in root.findall('country'):
    # 获取每一个i节点下rank节点的内容
    rank = int(i.find('rank').text)

    if rank > 50:
        # 删除指定country节点
        root.remove(i)

############ 保存文件 ############
tree = ET.ElementTree(root)
tree.write("newnew.xml", encoding='utf-8')

  B、以解析文件打开

from xml.etree import ElementTree as ET

############ 解析文件方式 ############

# 直接解析xml文件
tree = ET.parse("first.xml")

# 获取xml文件的根节点
root = tree.getroot()

############ 操作 ############

# 顶层标签
print(root.tag)

# 遍历data下的所有country节点
for i in root.findall('country'):
    # 获取每一个i节点下rank节点的内容
    rank = int(i.find('rank').text)

    if rank > 50:
        # 删除指定country节点
        root.remove(i)

############ 保存文件 ############
tree.write("first.xml", encoding='utf-8')

8.保存xml右缩进

'''
from xml.dom import minidom:由于原生保存的XML时默认无缩进,如果想要设置缩进的话, 需要修改保存方式:
'''


from xml.etree import ElementTree as ET
from xml.dom import minidom


def func(elem):
    '''
    将节点转化成字符串,并添加缩进
    :param elem:
    :return:
    '''
    rough_string=ET.tostring(elem,'utf-8')
    reparsed=minidom.parseString(rough_string)
    #返回缩进
    return reparsed.toprettyxml(indent="\t")

# 创建根节点
root = ET.Element("famliy")


# 创建子节点
son1 = ET.Element('son', {'name': 'a1'})
# 创建小儿子
son2 = ET.Element('son', {"name": 'a2'})

# 在子节点中创建子节点
grandson1 = ET.Element('grandson', {'name': 'a11'})
grandson2 = ET.Element('grandson', {'name': 'a12'})
#将字节点中的子节点追加到子节点中
son1.append(grandson1)
son1.append(grandson2)


# 将子节点追加到根节点中
root.append(son1)
root.append(son1)
#保存
r=func(root)
f=open('oooo.xml','w',encoding='utf-8')
f.write(r)
f.close()


 

--结束END--

本文标题: 三十二、python操作XML文件

本文链接: https://lsjlt.com/news/186897.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 三十二、python操作XML文件
    ''' XML:模块 xml总结 1、解析 str 文件 tree,ElementTree,type root,Element,type 2、操作 Element: tag,text,fin...
    99+
    2023-01-31
    操作 文件 三十二
  • 第十二章 Python文件操作
    12.1 open()open()函数作用是打开文件,返回一个文件对象。用法格式:open(name[, mode[, buffering[,encoding]]]) -> file objectname 文件名mode 模式,比如以...
    99+
    2023-01-31
    十二章 操作 文件
  • python操作Xml文件
    一、简单介绍Xml是实现不同语言或程序进行数据交换的协议,跟json差不多,但是xml远远先于json出现,例如在很多传统的金融行业的很多系统接口还主要是xml格式。Xml的格式如下:<Settings modified="2016-...
    99+
    2023-01-31
    操作 文件 python
  • python文件操作二
    1、常用函数: fileObject.read([size])size为读取的长度,以byte为单位。如果不指定参数,表示一次性读取全部内容,以字符串形式返回,并且每一行结尾会有一个"\n"符号。代码示例1: with open("tex...
    99+
    2023-01-31
    操作 文件 python
  • Python如何操作XML文件
    这篇文章主要介绍“Python如何操作XML文件”,在日常操作中,相信很多人在Python如何操作XML文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python如何操作XML文件”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • Python内置十大文件操作
    日常对于批量处理文件的需求非常多,经常需要用Python写脚本调用外部文件!本次整理Python中最常用的十大文件操作方法,直接拿来用就行啦!1、创建和打开文件想要操作文件需要先创建或代开指定文件并创建文件对象,用open()方法实现,其语...
    99+
    2023-05-14
    Python 文件操作
  • python处理xml文件操作详解
    目录1、python 操作xml的方式介绍2、ElementTree模块3、解析xml格式字符串并获取根节点4、读取节点内容,getroot()5、通标标签名直接获取标签(find,...
    99+
    2024-04-02
  • python学习笔记(十)、文件操作
    在前面我们了解到了没得模块,其中有一个模块为fileinput,为文件操作模块,不知道小伙伴们是否还记得?   1 打开文件   要打开文件,可以使用fileinput中的fileinput.input函数进行打开,也可以使用模块 io ...
    99+
    2023-01-31
    学习笔记 操作 文件
  • Python操作XML文件的使用指南
    目录什么是 XMLPython XML 解析模块xml.etree.ElementTree 模块使用 parse() 函数使用 fromstring() 函数寻找感兴趣的元素修改 X...
    99+
    2024-04-02
  • 【python笔记】第十四节 文件操作
    💕💕💕 博主昵称:摆烂阳💕💕💕 🥰博主主页跳转链接 👩‍...
    99+
    2023-09-03
    python 开发语言
  • 学习python的第十二天(文件的详细操
    一.文件打开常用的三总方式 1.文件打开r模式 只读不能写 with open('a.txet','r',encoding='gbk') as a: # 文件路径 文件打开方式 解码方式 变量名 ...
    99+
    2023-01-31
    二天 文件 详细
  • Python操作xml
    Xml XML指可扩展标记语言(Extensible Markup Language) XML被设计用于结构化、存储和传输数据 XML是一种标记语言,很类似于HTML XML没有像HTML那样具有预定义标签,需要程序员自定义标签。 ...
    99+
    2023-01-31
    操作 Python xml
  • Python文件操作之二进制文件详解
    目录1.二进制读取模式rb读取模式将读取到的内容写入到文件总结1.二进制读取模式 rt 读取文本文件(默认值) rb 读取二进制文件 file_name = ...
    99+
    2024-04-02
  • Python学习之旅(三十二)
    Python内置了turtle库,可以在计算机上绘图 运动控制: 1、画笔定位到坐标(x,y):turtle.goto(x,y) 2、向正方向运动 distance 长的距离:turtle.forward(distance) 3、向负方...
    99+
    2023-01-30
    之旅 Python 三十二
  • C#操作xml文件的方法
    本篇内容介绍了“C#操作xml文件的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C#操作xml文件实例是如何的呢?让我们先看看问题:已...
    99+
    2023-06-17
  • Python对XML文件实现增删改查操作
    目录PYTHON 操作 XML读取XML文件遍历XML元素查找XML元素添加XML元素修改XML元素PYTHON 操作 XML 读取XML文件 关于XML的介绍 <data&g...
    99+
    2022-11-13
    Python XML增删改查 Python XML操作 Python XML修改
  • 6.2Python文件的操作(二)
    目录 目录 前言 (一)文件的定位 (二)文件的读操作 ==1.read()方法== ==2.read...
    99+
    2023-01-30
    操作 文件 Python
  • python 文件操作(二) 替换性修改
      正常情况我们想要仅对文件某一行的内容进行修改,而不改变其他内容,在原文件的基础上不能修改,因为当我们对原文件进行写操作时,如果原文件里面有内容,就会清空,在这种情况下,只能对文件进行替换性修改:即重新创建一个文件,把原文件的内容按行复...
    99+
    2023-01-30
    操作 文件 python
  • C#实用教程操作xml文件
    操作XML文件是C#编程中非常常见的任务之一。下面是一个简单的C#实用教程,演示如何使用C#读取、编辑和保存XML文件。读取XML文...
    99+
    2023-09-15
    C#
  • C#实现XML文件操作详解
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { public Form1() { ...
    99+
    2022-12-23
    C# XML文件操作 C# XML 操作 C# XML
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作