PYTHON利用ElementTree解析XML数据

xml中节点Element类的函数

1 tag 当前节点标签名
2 attrib 当前节点属性
3 text 当前节点内容
4 append 添加一个子节点
5 clear 清空节点
6 extend 为当前节点添加 n 个子节点
7 find 获取第一个寻找到的子节点
8 findall 获取所有的子节点
9 findtext 获取第一个寻找到的子节点的内容
10 get 获取当前节点的属性
11 insert 在当前节点创建子节点,然后插入指定位置
12 items 获取当前节点的所有属性,和字典中的items一样,内容都是健值对
13 iter 在根据节点名称寻找所有指定的节点,并返回一个迭代器
14 iterfind 获取所有指定的节点,并放在一个迭代器中
15 itertext 在子孙中根据节点名称寻找所有指定的节点的内容,并返回一个迭代器
16 keys 获取当前节点的所有属性的 key
17 makeelement 创建一个新节点
18 remove 删除某个节点
19 set 设置当前节点属性

当XML文件较大或者其中的子节点tag非常多的时候,一个一个获取是比较麻烦,我们可以通过find(‘nodeName’)或者findall(‘nodeName’)方法来查找指定tag的节点。

find(‘nodeName’):表示在该节点下,查找其中第一个tag为nodeName的节点。
findall(‘nodeName’):表示在该节点下,查找其中所有tag为nodeName的节点。

from xml.etree import ElementTree  as ET  #引入ElementTree的包
tree=ET.parse("test.xml")
root=tree.getroot()
for child in root:
    print(child.tag,child.text,child.attrib)
    for sub in child:
        print(sub.tag,sub.text,sub.attrib)
        for sub1 in sub:
            print(sub1.tag,sub1.text,sub1.attrib)
            for sub2 in sub1:
                print(sub2.tag,sub2.text,sub2.attrib)
                .........

单独提取相应的数据
案例一:
for value in root.iter("object"):   #直接通过标题获取内容、标题等
    print(value.tag, value.text, value.attrib)
 案例二:
    for child in root:
        print(root[0].tag)  #### 0、1、2、3.。。。代表目录级,tag:类似标题,text:类似内容,attrib:类似属性
   可以写成root[0].tag.get('eNB')、root[0][1]。。等
案例三:批量导入XML并写到TXT或CSV 
import os
import sys
import xml.etree.ElementTree as ET
import glob

indir='D:\\(D-drive)\\GZ\\VOLTE专项\\TOOL\\P编程\\程序\\2019\\XML\\inputfile\\'

outdir='D:\\(D-drive)\\GZ\\VOLTE专项\\TOOL\\P编程\\程序\\2019\\XML\\outputfile\\'
os.chdir(indir)
infile = os.listdir('.')
infile = glob.glob(str(infile)+'*.xml')

for i, file in enumerate(infile):

    file_txt = os.path.join(outdir, 'test.csv')
    f_w = open(file_txt, 'w')


    # actual parsing
    in_file = open(file)
    print(file)

    tree = ET.parse(in_file)
    root = tree.getroot()
    root1=root[1][0]
    for sub1 in root1:
        eci=sub1.attrib.get('id')
        for sub2 in sub1:
            vl=sub2.text
            print(eci,vl)
            f_w.write(eci +","+ vl+ '\n')

另一个例子

import os
import sys
import xml.etree.ElementTree as ET
import glob

indir='D:\\(D-drive)\\GZ\\VOLTE专项\\TOOL\\P编程\\程序\\2019\\XML\\inputfile\\'

outdir='D:\\(D-drive)\\GZ\\VOLTE专项\\TOOL\\P编程\\程序\\2019\\XML\\outputfile\\'
os.chdir(indir)
infile = os.listdir('.')
infile = glob.glob(str(infile)+'*.xml')
file_txt = os.path.join(outdir, 'test.csv')
f_w = open(file_txt, 'w')
f_w.write("。。。。。。。。。。。。。。。。。。。+'\n')
f_w.closed

for i, file in enumerate(infile):
    f_w = open(file_txt, 'a')

    # actual parsing
    in_file = open(file)
    print("正在解析文件:"+file)

    tree = ET.parse(in_file)
    root = tree.getroot()
    for obj1 in root.iter('eNB'):
        enb=obj1.attrib.get('userLabel')
        enbid=obj1.attrib.get('id')

    root1=root[1][0]
    for sub1 in root1:
        eci=sub1.attrib.get('id')
        rtime=sub1.attrib.get("TimeStamp")
        for sub2 in sub1:
            v1=sub2.text
            v1=v1.split()[0]+","+v1.split()[1]+","+v1.split()[4]+","+v1.split()[5]+","+v1.split()[7]+","+v1.split()[8]+","+v1.split()[9]+","+v1.split()[10]+","+v1.split()[11]
            #print(eci,v1)
            f_w.write(rtime+","+enb+","+enbid+","+eci +","+ v1+ '\n')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: PythonElementTree 模块是一种解析和操作 XML 文档的方式。您可以使用 ElementTree 读取 XML 文件,也可以使用 ElementTree 创建和修改 XML 文档。 以下是 ElementTree 解析 XML 的基本步骤: 1. 导入 ElementTree 模块。 2. 使用 ElementTree 的 parse() 函数打开 XML 文件。 3. 获取根元素。 4. 使用根元素的 find() 或 findall() 方法查找特定元素。 5. 使用元素的 attrib 属性获取元素的属性。 6. 使用元素的 text 属性获取元素的文本。 下面是一个使用 ElementTree 解析 XML 文件的示例代码: ```python import xml.etree.ElementTree as ET # 打开 XML 文件 tree = ET.parse('example.xml') # 获取根元素 root = tree.getroot() # 查找所有 country 元素 for country in root.findall('country'): # 获取 country 元素的属性 name = country.get('name') population = country.get('population') print(name, population) # 查找 country 元素下的 rank 元素 rank = country.find('rank') # 获取 rank 元素的文本 print(rank.text) ``` 这是一个基本的示例代码,您可以根据您的需要进行更改和修改,以实现特定的 XML 解析和操作功能。 ### 回答2: Python ElementTreePython标准库中用于XML解析的模块,他提供了一个简单而有效的方法来解析XML文档并提取相关数据PythonElementTreePython中提供了一种基于树型结构的解析方式,可以很简单的遍历整个XML文档。 ElementTree提供了Element类,该类代表XML元素。每个XML元素都有指定的标签、属性和子元素,可以使用ElementTreePython中很容易地解析和处理这些元素。 下面是Python ElementTree解析XML的一些常用方法: 1. parse()函数:使用此函数加载XML文件并将其转换为ElementTree对象。 2. Element()函数:使用此函数创建一个新的元素。 3. findall()函数:使用此函数查找所有匹配特定标签的元素。它将返回一个元素列表。 4. find()函数:使用此函数查找第一个匹配特定标签的元素。它将返回一个元素对象。 5. text属性:使用此属性访问元素标记中的文本内容。 6. attrib属性:使用此属性访问元素的属性字典。 7. tag属性:使用此属性访问元素的标签名称。 8. get()方法:使用此方法取得元素的特殊属性。 9. iter()函数:使用此函数可以遍历整个XML文档,一次处理每个元素。 总体而言,Python ElementTree提供了一种非常灵活和强大的方式来解析和处理XML文件。无论是处理大型的、复杂的XML文档,还是处理小型的、简单的XML文件,Python ElementTree均能提供一种非常方便、易用和高效的解决方案。 ### 回答3: Python ElementTreePythonXML 解析库, 通过Python ElementTree, 可以轻松地解析和操作 XML 文件。本文将简要介绍如何使用Python ElementTree解析XML文件。 1. 解析XML文件 在Python中,可以使用ElementTree库的ElementTree.parse()方法解析XML文件,例如: ``` import xml.etree.ElementTree as ET tree = ET.parse('filename.xml') root = tree.getroot() ``` 通过以上代码,我们将XML文件以tree对象的方式进行解析,并得到XML文件的根节点root。此时我们可以通过打印root节点,查看该文件的内部结构。 2. 获取节点数据 一旦我们已经解析XML,我们可以使用Python ElementTree库访问和操作树中的节点数据。最常用的方法即是通过节点的标签名称和属性来访问该节点: ``` root = ET.fromstring(country_data_as_string) for child in root: print(child.tag, child.attrib) ``` 在这个例子中,我们遍历了XML文档中所有节点,打印出它们的标签名称和属性。 3. 查找特定节点 有时候我们只需要获取XML文档中的特定节点。此时可以使用element.find()方法,该方法返回XML文档中tag名称与我们期望的相同的第一个元素。例如: ``` root.find(".//rank/[@year='2011']") ``` 上述代码中,我们使用XPath表达式在根元素之下查找rank元素,并使用一个特定的year属性值过滤这些元素。我们可以将输出与我们所期望的元素进行比较,以确定方法是否有效。 4. 修改XML文件 使用Python ElementTree库,我们可以轻松地修改XML文档中的数据并将其写回到文件中。例如,我们可以使用以下代码将内容写回到XML文件中: ``` tree.write('filename.xml') ``` 如果需要只写入更新后的XML元素,而不是完整的XML文档,则可以使用ElementTree.tostring()方法。例如: ``` xml_string = ET.tostring(root) ``` 在本文中,我们已经简要介绍了如何使用Python ElementTree解析XML和查找特定节点以及修改XML文件。Python ElementTree是一个功能强大和灵活的XML解析库,可用于处理各种规模和类型的XML文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_44390640

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值