精华内容
下载资源
问答
  • 主要介绍了python读取xml文件方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • Python读写XML文件实例

    2018-09-11 14:39:20
    Pythonxml文件读取xml文件信息。 内容包含代码实例,以及xml文件格式参考。
  • Python读写XML文件

    万次阅读 2018-09-19 13:00:04
    什么是XML XML是可扩展标记语言(Extensible Markup Language)的缩写,其中标记是关键部分。用户可以创建内容,然后使用限定标记标记它,从而使每个单词、短语或块成为可识别、可分类的信息。 标记语言从早起的...

    什么是XML


    XML是可扩展标记语言(Extensible Markup Language)的缩写,其中标记是关键部分。用户可以创建内容,然后使用限定标记标记它,从而使每个单词、短语或块成为可识别、可分类的信息。
    标记语言从早起的私有公司和政府制定形式逐渐演变成标准通用标记语言(Standard Generalized Markup Language,SGML)、超文本标记语言(Hypertext Markup Language,HTML),并且最终演变成XML。XML有以下几个特点:

    • XML的设计宗旨是传输数据,而非显示数据
    • XML的标签没有被预定义,用户需要自行定义标签
    • XML被设计为具有自我描述性
    • XML是W3C的推荐标准

    Python对XML文件的解析


    常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,使用场合也不同。DOM是由W3C官方提出的标准,它会把整个XML文件读入内存,并将该文件解析成树,我们可以通过访问树的节点的方式访问XML中的标签,但是这种方法占用内存大,解析慢,如果读入文件过大,尽量避免使用这种方法。SAX是事件驱动的,通过在解析XML的过程中触发一个个的事件并调用用户自定义的回调函数来处理XML文件,速度比较快,占用内存少,但是需要用户实现回调函数,因此Python标准库的官方文档中这样介绍SAX:SAX每次只允许你查看文档的一小部分,你无法通过当前获取的元素访问其他元素。Python中提供了很多包支持XML文件的解析,如xml.dom,xml.sax,xml.dom.minidom和xml.etree.ElementTree等,本文重点介绍xml.dom.minidom

    xml.dom.minidom包

    xml.dom.minidom是DOM API的极简化实现,比完整版的DOM要简单的多,而且这个包也小得多,下面以movie.xml文件为例进行操作。

    <collection shelf="New Arrivals">
    <movie title="Enemy Behind">
       <type>War, Thriller</type>
       <format>DVD</format>
       <year>2003</year>
       <rating>PG</rating>
       <stars>10</stars>
       <description>Talk about a US-Japan war</description>
    </movie>
    <movie title="Transformers">
       <type>Anime, Science Fiction</type>
       <format>DVD</format>
       <year>1989</year>
       <rating>R</rating>
       <stars>8</stars>
       <description>A schientific fiction</description>
    </movie>
       <movie title="Trigun">
       <type>Anime, Action</type>
       <format>DVD</format>
       <episodes>4</episodes>
       <rating>PG</rating>
       <stars>10</stars>
       <description>Vash the Stampede!</description>
    </movie>
    <movie title="Ishtar">
       <type>Comedy</type>
       <format>VHS</format>
       <rating>PG</rating>
       <stars>2</stars>
       <description>Viewable boredom</description>
    </movie>
    </collection>
    

    然后我们调用xml.dom.minidom.parse方法读入xml文件并解析成DOM树

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    from xml.dom.minidom import parse
    import xml.dom.minidom
     
    # 使用minidom解析器打开 XML 文档
    DOMTree = xml.dom.minidom.parse("movies.xml")
    collection = DOMTree.documentElement
    if collection.hasAttribute("shelf"):
       print "Root element : %s" % collection.getAttribute("shelf")
     
    # 在集合中获取所有电影
    movies = collection.getElementsByTagName("movie")
     
    # 打印每部电影的详细信息
    for movie in movies:
       print "*****Movie*****"
       if movie.hasAttribute("title"):
          print "Title: %s" % movie.getAttribute("title")
     
       type = movie.getElementsByTagName('type')[0]
       print "Type: %s" % type.childNodes[0].data
       format = movie.getElementsByTagName('format')[0]
       print "Format: %s" % format.childNodes[0].data
       rating = movie.getElementsByTagName('rating')[0]
       print "Rating: %s" % rating.childNodes[0].data
       description = movie.getElementsByTagName('description')[0]
       print "Description: %s" % description.childNodes[0].data
    

    以上程序执行结果如下:

    Root element : New Arrivals
    *****Movie*****
    Title: Enemy Behind
    Type: War, Thriller
    Format: DVD
    Rating: PG
    Description: Talk about a US-Japan war
    *****Movie*****
    Title: Transformers
    Type: Anime, Science Fiction
    Format: DVD
    Rating: R
    Description: A schientific fiction
    *****Movie*****
    Title: Trigun
    Type: Anime, Action
    Format: DVD
    Rating: PG
    Description: Vash the Stampede!
    *****Movie*****
    Title: Ishtar
    Type: Comedy
    Format: VHS
    Rating: PG
    Description: Viewable boredom
    

    实战—批量修改XML文件


    最近在用caffe-ssd训练比赛的数据集,但是官方给的数据集用来标记的XML文件并不是标准格式,一些标签的命名不对,导致无法正确生成lmdb文件,因此需要修改这些标签,下面用Python实现了一个批量修改XML文件的脚本。

    # -*- coding:utf-8 -*-
    
    import os
    
    import xml.dom.minidom
    
    xml_file_path = "/home/lyz/data/VOCdevkit/MyDataSet/Annotations/"
    lst_label = ["height", "width", "depth"]
    lst_dir = os.listdir(xml_file_path)
    
    
    for file_name in lst_dir:
        file_path = xml_file_path + file_name
        tree = xml.dom.minidom.parse(file_path)
        root = tree.documentElement		#获取根结点
        size_node = root.getElementsByTagName("size")[0]
        for size_label in lst_label:	#替换size标签下的子节点
            child_tag = "img_" + size_label
            child_node = size_node.getElementsByTagName(child_tag)[0]
            new_node = tree.createElement(size_label)
            text = tree.createTextNode(child_node.firstChild.data)
            new_node.appendChild(text)
            size_node.replaceChild(new_node, child_node)
    
        #替换object下的boundingbox节点
        lst_obj = root.getElementsByTagName("object")
        data = {}
        for obj_node in lst_obj:
            box_node = obj_node.getElementsByTagName("bounding_box")[0]
            new_box_node = tree.createElement("bndbox")
            for child_node in box_node.childNodes:
                tmp_node = child_node.cloneNode("deep")
                new_box_node.appendChild(tmp_node)
            x_node = new_box_node.getElementsByTagName("x_left_top")[0]
            xmin = x_node.firstChild.data
            data["xmin"] = (xmin, x_node)
            y_node = new_box_node.getElementsByTagName("y_left_top")[0]
            ymin = y_node.firstChild.data
            data["ymin"] = (ymin, y_node)
            w_node = new_box_node.getElementsByTagName("width")[0]
            xmax = str(int(xmin) + int(w_node.firstChild.data))
            data["xmax"] = (xmax, w_node)
            h_node = new_box_node.getElementsByTagName("height")[0]
            ymax = str(int(ymin) + int(h_node.firstChild.data))
            data["ymax"] = (ymax, h_node)
    
    
            for k, v in data.items():
                new_node = tree.createElement(k)
                text = tree.createTextNode(v[0])
                new_node.appendChild(text)
                new_box_node.replaceChild(new_node, v[1])
            obj_node.replaceChild(new_box_node, box_node)
    
        with open(file_path, 'w') as f:
            tree.writexml(f, indent="\n", addindent="\t", encoding='utf-8')
    
        #去掉XML文件头(一些情况下文件头的存在可能导致错误)
        lines = []
        with open(file_path, 'rb') as f:
            lines = f.readlines()[1:]
        with open(file_path, 'wb') as f:
            f.writelines(lines)
    
    print("-----------------done--------------------")
    

    关于writexml方法:indent参数表示在当前节点之前插入的字符,addindent表示在该结点的子节点前插入的字符

    展开全文
  • 使用Python读取XML文件

    2020-06-12 16:56:27
    使用Python读取XML文件,并且如何读取数据集的内容,获得数据集的标签,将其运用到训练过程中,通过该文件学会如何读取XML文件的内容,最终实现自己的数据集读取
  • python读取XML文件资料集合,python读取XML文件资料集合
  • pythonxml文件

    2018-12-28 11:03:10
    python 读xml并提取相关信息,pythonxml文件并提取相关信息
  • python读取xml文件代码

    2018-03-28 21:02:49
    示例了利用python对不同层的xml文件进行直接读取的方法。
  • 主要介绍了详解 Python 读写XML文件的实例的相关资料,Python 生成XML文件和Python 读取XML 的实例,需要的朋友可以参考下
  • python读取XML文件

    2020-11-25 09:47:46
    Python自带xml库,可以通过xml.dom读取xml文件。比如有如下xml文件 <?xml version="1.0"?> <company> <name>mediumcn ltd</name> <staff id="1001"> <nickname>Ben</...

    文章转载:https://mediumcn.com/python3/how-to-read-xml

    Python自带xml库,可以通过xml.dom读取xml文件。比如有如下xml文件

    <?xml version="1.0"?>
    <company>
    	<name>mediumcn ltd</name>
    	<staff id="1001">
    		<nickname>Ben</nickname>
    		<salary>30,000</salary>
    	</staff>
    	<staff id="1002">
    		<nickname>Jim</nickname>
    		<salary>30,000</salary>
    	</staff>
    	<staff id="1003">
    		<nickname>Alen</nickname>
    		<salary>40,000</salary>
    	</staff>
    </company>
    from xml.dom import minidom
    
    doc = minidom.parse("assets/test.xml")
    
    name = doc.getElementsByTagName("name")[0]
    print(name.firstChild.data)
    
    staffs = doc.getElementsByTagName("staff")
    for staff in staffs:
            sid = staff.getAttribute("id")
            nickname = staff.getElementsByTagName("nickname")[0]
            salary = staff.getElementsByTagName("salary")[0]
            print("id:%s, nickname:%s, salary:%s" %
                  (sid, nickname.firstChild.data, salary.firstChild.data))

    输出: 

    mediumcn ltd
    id:1001, nickname:Ben, salary:30,000
    id:1002, nickname:Jim, salary:30,000
    id:1003, nickname:Alen, salary:40,000

    这种方法不太严谨,没有判断节点是否为叶子节点,就打印了data。更严谨的做法如下:

    def getNodeText(node):
        nodelist = node.childNodes
        result = []
        for node in nodelist:
            if node.nodeType == node.TEXT_NODE:
                result.append(node.data)
        return ''.join(result)
    
    name = doc.getElementsByTagName("name")[0]
    print("Node Name : %s" % name.nodeName)
    print("Node Value : %s \n" % getNodeText(name))
    
    
    staffs = doc.getElementsByTagName("staff")
    for staff in staffs:
            sid = staff.getAttribute("id")
            nickname = staff.getElementsByTagName("nickname")[0]
            salary = staff.getElementsByTagName("salary")[0]
            print("id:%s, nickname:%s, salary:%s" %
                  (sid, getNodeText(nickname), getNodeText(salary)))

    通过判断if node.nodeType == node.TEXT_NODE:来准确识别xml叶子节点,这样可以避免数据错误。

     

     

     

    展开全文
  • 主要介绍了python解析xml文件方式(解析、更新、写入),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • python读取xml文件

    千次阅读 2018-09-08 15:41:35
    推荐如下链接: 深入解读Python解析XML的几种方式 ...python3.2 读写 xml( xml.etree.ElementTree,xml.dom ) https://blog.csdn.net/chenyulancn/article/details/8856790 ----------------------...

    推荐如下链接:
    深入解读Python解析XML的几种方式
    https://www.jb51.net/article/79494.htm

    python3.2 读写 xml( xml.etree.ElementTree,xml.dom )
    https://blog.csdn.net/chenyulancn/article/details/8856790

    ------------------------------------------------------------------------------------------

    xml文件例子如下,将其复制并保存为文件名为test.xml

    业务场景为读取每个班级(id表示)的学生信息(姓名,年龄)

    <?xml version="1.0" encoding="utf-8"?>
    <Info>
    <L>
    <c id="1">
    <d name = "Jack" age="12"/>
    <d name = "Rose" age="11"/>
    </c>
    <c id="2">
    <d name = "Mike" age="10"/>
    <d name = "Butter" age="11"/>
    </c>
    <c id="3">
    <d name = "Lucy" age="12"/>
    <d name = "Tom" age="13"/>
    </c>
    </L>
    </Info>

     

    xml.etree.ElementTree模块实现了一个简单而高效的API用于解析和创建XML数据。

    python代码如下:

    #coding="utf-8"
    # 可通过字符串导入:
    # root = ET.fromstring(country_data_as_string)  # fromstring() 解析XML时直接将字符串转换为一个 Element,解析树的根节点。其他的解析函数会建立一个 ElementTree)
    #从硬盘文件导入:
    import xml.etree.ElementTree as ET
    tree = ET.parse('test.xml')
    root = tree.getroot()
    #print(root[0])  # 标签为L的元素 <Element 'L' at 0x02639360>
    for i in range(len(root[0])):
        data = root[0][i]
        classname = root[0][i].attrib['id']  # 班级
        for child in data.getchildren():
            #print(child)        # 输出元素 <Element 'd' at 0x020B94B0>
            #print(child.tag)    # 标签为d
            onedict = child.attrib   # {'name': 'Mike', 'age': '10'}
            name = onedict['name']   # 姓名
            age = onedict['age']     # 年龄
            print('班级:{0}班, 姓名:{1}, 年龄:{2}'.format(classname, name, age))
    

    结果如下:

    展开全文
  • 本文将介绍深入解读利用Python语言解析XML文件的几种方式,并以笔者推荐使用的ElementTree模块为例,演示具体使用方法和场景。文中所使用的Python版本为2.7。XML是可扩展标记语言(ExtensibleMarkupLanguage)的缩写...
  • ----国外课栈链接 什么是XML? XML代表可扩展标记语言...在本教程中,我们将看到如何在Python中使用XML minidom类来加载和解析XML文件。 如何使用minidom解析XML 我们已经创建了一个我们要解析的示例XML文件。 步骤1...

    ----国外课栈链接

    什么是XML?

    XML代表可扩展标记语言。它旨在存储和传输中小数据量,并广泛用于共享结构化信息。

    Python使您能够解析和修改XML文档。为了解析XML文档,您需要将整个XML文档放在内存中。在本教程中,我们将看到如何在Python中使用XML minidom类来加载和解析XML文件。

    如何使用minidom解析XML

    我们已经创建了一个我们要解析的示例XML文件。

    步骤1)在文件内部,我们可以看到名字,姓氏,主页和专业领域(SQL,Python,测试和业务)
    在这里插入图片描述

    步骤2)一旦我们解析了文档,我们将打印出文档根目录的“节点名称”和“ firstchild标记名”。Tagname和nodename是XML文件的标准属性。

    在这里插入图片描述

    导入xml.dom.minidom模块并声明必须解析的文件(myxml.xml)

    此文件包含有关员工的一些基本信息,如名字,姓氏,家庭,专业知识等。

    我们使用XML minidom上的parse函数来加载和解析XML文件

    我们有变量doc和doc获取解析函数的结果

    我们想从文件中打印nodename和child标记名,因此我们在print函数中声明它

    运行代码 - 它从XML文件打印出节点名称(#document),从XML文件打印出第一个子标记名(员工)

    注意:

    Nodename和子标记名是XML dom的标准名称或属性。

    步骤3)我们还可以从XML文档中调用XML标记列表,并打印其内容。在这里,我们打印出一系列技能,如SQL,Python,测试和业务。

    在这里插入图片描述

    声明变量“专业知识”,我们将从中提取员工所具有的所有专业知识,使用名为“getElementsByTagName”的dom标准函数,这将获得所有名为skilled的元素,在每个skill tag上声明循环,运行代码 - 它将列出四种技能。

    如何创建XML节点

    我们可以使用“createElement”函数创建一个新属性,然后将这个新属性或标记附加到现有的XML标记。我们在XML文件中添加了一个新标签“BigData”。您必须编写代码将新属性(BigData)添加到现有XML标记,然后,您必须使用附加了现有XML标记的新属性打印出XML标记。
    在这里插入图片描述

    要添加新XML并将其添加到文档中,我们使用代码“doc.create elements“,此代码将为我们的新属性“Big-data”创建一个新技能标记,将此技能标记添加到文档第一个子节点(员工),运行代码,新标签“大数据”将与其他专业知识列表一起出现

    XML解析示例

    Python 2示例

    import xml.dom.minidom
    
    def main():
    # use the parse() function to load and parse an XML file
       doc = xml.dom.minidom.parse("Myxml.xml");
      
    # print out the document node and the name of the first child tag
       print doc.nodeName
       print doc.firstChild.tagName
      
    # get a list of XML tags from the document and print each one
       expertise = doc.getElementsByTagName("expertise")
       print "%d expertise:" % expertise.length
       for skill in expertise:
         print skill.getAttribute("name")
        
    # create a new XML tag and add it into the document
       newexpertise = doc.createElement("expertise")
       newexpertise.setAttribute("name", "BigData")
       doc.firstChild.appendChild(newexpertise)
       print " "
    
       expertise = doc.getElementsByTagName("expertise")
       print "%d expertise:" % expertise.length
       for skill in expertise:
         print skill.getAttribute("name")
        
    if name == "__main__":
      main();
    

    Python 3示例

    import xml.dom.minidom
    
    def main():
        # use the parse() function to load and parse an XML file
        doc = xml.dom.minidom.parse("Myxml.xml");
    
        # print out the document node and the name of the first child tag
        print (doc.nodeName)
        print (doc.firstChild.tagName)
        # get a list of XML tags from the document and print each one
        expertise = doc.getElementsByTagName("expertise")
        print ("%d expertise:" % expertise.length)
        for skill in expertise:
            print (skill.getAttribute("name"))
    
        # create a new XML tag and add it into the document
        newexpertise = doc.createElement("expertise")
        newexpertise.setAttribute("name", "BigData")
        doc.firstChild.appendChild(newexpertise)
        print (" ")
    
        expertise = doc.getElementsByTagName("expertise")
        print ("%d expertise:" % expertise.length)
        for skill in expertise:
            print (skill.getAttribute("name"))
    
    if __name__ == "__main__":
        main();
    

    如何使用ElementTree解析XML

    ElementTree是一个用于操作XML的API。ElementTree是处理XML文件的简便方法。

    我们使用以下XML文档作为示例数据:

    <data>
       <items>
          <item name="expertise1">SQL</item>
          <item name="expertise2">Python</item>
       </items>
    </data>
    

    使用ElementTree读取XML:

    我们必须先导入xml.etree.ElementTree模块。

    import xml.etree.ElementTree as ET
    

    现在让我们获取根元素:

    root = tree.getroot()
    

    以下是读取上述xml数据的完整代码

    import xml.etree.ElementTree as ET
    tree = ET.parse('items.xml')
    root = tree.getroot()
    
    # all items data
    print('Expertise Data:')
    
    for elem in root:
       for subelem in elem:
          print(subelem.text)
    

    输出:

    Expertise Data:
    SQL
    Python
    

    摘要:

    Python使您可以一次解析整个XML文档,而不是一次解析一行。为了解析XML文档,您需要将整个文档保存。解析XML文档,导入xml.dom.minidom,使用函数“parse”来解析文档(doc = xml.dom.minidom.parse(文件名);使用代码(=doc.getElementsByTagName(“xml标记的名称”)从XML文档调用XML标记列表,使用函数“createElement”在XML文档中创建和添加新属性。

    展开全文
  • from xml.dom.minidom import parse import xml.dom.minidom import os import sys import xlsxwriter def readxml(name): rootpath = os.getcwd() path = os.path.join(rootpath,name) dom = xml.dom.minidom....
  • python XML文件读取

    2018-07-16 17:05:47
    提供简单python读取xml方式,适用于简单xml文件读取功能
  • 主要给大家介绍了关于利用python实现xml与数据库读取转换的方法,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
  • python读取xml文件内容

    千次阅读 2019-02-25 13:54:56
    import xml.dom.minidom dom = xml.dom.minidom.parse(path) print dom.toprettyxml()
  • Python 读取xml文件数据

    2020-03-31 10:46:13
    使用xml文件存储数据,然后用python读取xml文件数据,实现如下: 用到的库:os,xml.dom.minidom 库的安装方法:pip install xml.dom.minidom 代码: import os import xml.dom.minidom as minidom def server_IP(): ...
  • 主要介绍了Python实现提取XML内容并保存到Excel中的方法,涉及Python针对xml文件读取、解析以及Excel文件的写入、保存等相关操作技巧,需要的朋友可以参考下
  • 主要用xml.etree.ElementTree模块(简称 ET)来解析xml文件,它提供了轻量级的Python式的API。读取VOC数据集大致流程如下: import xml.etree.ElementTree as ET tree = ET.parse(file_name) root = tree.getroot()...
  • 欢迎关注”生信修炼手册”!xml是一种可扩展的标记语言,是互联网中数据存储和传输的一种常用格式,遵循树状结构的方式,在各个节点中存储用户自定义的数据,一个xml文件示例如下<?x...
  • 写了一个Python程序,根据xml文件,把标注图片,按标注框裁剪出来,并在扩容后保存到相应类别文件夹下
  • xml文件读取信息,存储到csv文件
  • 下载的数据是pascal voc2012的数据,已经有annotation了,不过是xml格式的,训练的模型是在Google模型的基础上加了两层网络,因此要在原始图像中裁剪出用于训练的部分图像。 另外,在原来给的标注框的基础上,做了点...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 67,514
精华内容 27,005
关键字:

python读取xml文件

python 订阅