zoukankan      html  css  js  c++  java
  • python常用模块之xml模块

    python常用模块之xml模块

    xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,在json还没诞生的年代,大家都是使用xml,目前很多传统公司的系统接口主要还是xml。

    xml的格式主要如下,都是通过<>标签对来区别数据结构的:

    <data>
        <country name="Liechtenstein">
            <rank updated="yes">2</rank>
            <year updated="yes">2009</year>
            <gdppc>141100</gdppc>
            <neighbor direction="E" name="Austria" />
            <neighbor direction="W" name="Switzerland" />
        </country>
        <country name="Singapore">
            <rank updated="yes">5</rank>
            <year updated="yes">2012</year>
            <gdppc>59900</gdppc>
            <neighbor direction="N" name="Malaysia" />
        </country>
        <country name="Panama">
            <rank updated="yes">69</rank>
            <year updated="yes">2012</year>
            <gdppc>13600</gdppc>
            <neighbor direction="W" name="Costa Rica" />
            <neighbor direction="E" name="Colombia" />
        </country>
    </data>
    

    xml协议在每个语言中都是支持的,在python中可以用以下模块操作xml

    # 遍历
    import xml.etree.ElementTree as ET
    
    tree = ET.parse("xmltest.xml")  # 使用parse函数打开xml文件,并赋值给变量tree
    # print(tree)  # <xml.etree.ElementTree.ElementTree object at 0x000001F3FF2BEC18>
    root = tree.getroot()
    # print(root)  # <Element 'data' at 0x00000249B582A958>   等于找到了xml文件root根的内存地址
    # print(root.tag)  # data   可以理解成这个内存地址代表的是data
    
    for child in root:  # 此时的root是xml文件根内存地址
        print('---------------------------',child.tag,child.attrib)  # child.tag代表根的下一级开始的地方country,child.attrib代表参数
        for i in child:
            print(i.tag,i.text)  # i.tag代表着country下一级开始的地方即rank等,i.text代表值
    
    
    # 只查找year
    for i in root.iter('year'):
        print(i.text)
    # 2009
    # 2012
    # 2012
    
    # 修改,year都增加1
    for i in root.iter('year'):
        new_year = int(i.text) + 1  # i.text代表值
        i.text = str(new_year)  # xml中只支持str类型
        i.set("update","yes")  # 添加属性
    
    tree.write("xmltest.xml")  # 将更改的内容写进原文档中
    
    # 删除
    for node in root.findall('country'):  # 在整个xml文件中查找country开头的k
        rank = int(node.find('rank').text)  # 然后找到rank的值并转换成int类型重新赋值给rank
        if rank > 30:
            root.remove(node)  # 如果符合条件则删除root下这个country的k
    
    tree.write("new_xmltest.xml")
    

    快来创建自己的xml文档把

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/5/14 18:03
    # @Author  : XiaoYafei
    # @File    : 02-创建自己的xml文档.py
    
    import xml.etree.ElementTree as ET
    
    root = ET.Element('namelist')  # namelist为根
    
    name = ET.SubElement(root,"name",attrib={'enrolled':"yes"})  # 往namelist根下创建name大节点,属性为...
    age = ET.SubElement(name,"age",attrib={'checked':"no"})  # 在name大节点下创建age小节点,属性为...
    sex = ET.SubElement(name,"sex")  # 添加小节点sex
    name = ET.SubElement(name,"name")
    name.text = 'xiao'
    sex.text = 'male'  # sex节点的值
    
    et = ET.ElementTree(root)
    et.write("my.xml",encoding='utf-8',xml_declaration='True')  # 版本号声明
    

    此时创建的my.xml文件为:

    <?xml version='1.0' encoding='utf-8'?>
    <namelist>
        <name enrolled="yes">
            <age checked="no" />
            <sex>male</sex>
            <name>xiao</name>
        </name>
    </namelist>
    
  • 相关阅读:
    golang官网可以打开了 go语言
    TinyMCE添加图片 路径自动处理成相对路径
    谷歌浏览器下载地址 chrome最新版本 百度云地址
    对过度自信的矫正
    一个公司需要解决的7个问题
    git mv 命令 移动或重命名
    工信部备案查询验证码输入错误的原因
    Linux下安装jmeter
    jmeter-请求参数化
    更改jmeter发送邮件样式(转)
  • 原文地址:https://www.cnblogs.com/xiaoyafei/p/9037516.html
Copyright © 2011-2022 走看看