python基础(xml读写)

常用的数据集voc的标签格式是xml,看看xml的读写方法吧。
我是从以下几个网站进行学习的:
Python XML解析
python 读取xml
Python使用ElementTree解析XML
python有三种方法解析XML,SAX,DOM,以及ElementTree:

.SAX (simple API for XML )
python 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。
2.DOM(Document Object Model)
将XML数据在内存中解析成一个树,通过对树的操作来操作XML。
3.ElementTree(元素树)
ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。
xml.etree.ElementTree 模块对含有恶意代码的数据是不安全的。如果你想处理不信任的数据请使用 XML vulnerabilities。
每个element都有一系列相关属性:

  • 标签,用于标识该元素表示哪种数据(即元素类型)
  • 一些属性,存储在Python dictionary中
  • 一个文本字符串
  • 一个可选的尾字符串
  • 一些孩子elements,存储在Python sequence中

xml的解析

使用下面的xml为例:


    
       "countryText"
        1
        2008
        141100
        
        
    
    
        4
        2011
        59900
        
    
    
        68
        2011
        13600
        
        
    

对于xml文件而言可以使用

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()

对于内存中的字符串可以使用:

root = ET.fromstring(country_data_as_string)

ElementTree的解析,会将文件转化为树状结构,每一个节点是一个Element,一个Element中可能包含多个子Element。
获取了根结点之后,有两种获取字节点的方法。
第一种是:

for child in root:
    print(child.tag, child.attrib,child.text)

其中child.tag为属性名称,比如country, child.attrib为对应属性中所包含的字段,比如name="Liechtenstein",类型为dict(字典),child.text为属性中所包含的文本信息,比如 "countryText"。
第二种是:

 root.findall('country')
 root.find('country'):
child.get("name")

其中Element.findall() 查找当前element的孩子的属于某个tag的element。 Element.find() 查找属于某个tag的第一个element, Element.text 访问element的文本内容。 Element.get()获取element的属性,也就是child.attrib对应的value。当然因为可能包含多个element,所以你使用的时候需要提供key。

xml的修改

#修改默认属性
child.text='new field'
#添加新的element
child.se('updated', 'yes')

xml的保存

# 保存修改了的xml
import xml.etree.ElementTree as ET
tree = ET.parse('myTest.xml')
root = tree.getroot()
print(len(root))
for child in root:
    child.text = 'new Field'
tree.write('final.xml')

你可能感兴趣的:(python基础(xml读写))