• 7.python模块补充


    此文章是对上节文章模块的补充

    一,xml模块

    xml是实现不同语言或程序之间进行数据交换的协议,可扩展标记语言标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言xml的格式如下,就是通过<>节点来区别数据结构的:

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?xml version="1.0"?>
    <data>
        <country name="Liechtenstein">
            <rank updated="yes">2</rank>
            <year>2008</year>
            <gdppc>141100</gdppc>
            <neighbor name="Austria" direction="E"/>
            <neighbor name="Switzerland" direction="W"/>
        </country>
        <country name="Singapore">
            <rank updated="yes">5</rank>
            <year>2011</year>
            <gdppc>59900</gdppc>
            <neighbor name="Malaysia" direction="N"/>
        </country>
        <country name="Panama">
            <rank updated="yes">69</rank>
            <year>2011</year>
            <gdppc>13600</gdppc>
            <neighbor name="Costa Rica" direction="W"/>
            <neighbor name="Colombia" direction="E"/>
        </country>
    </data>

    python模块解析xml

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    导入模块 别名ET
    import xml.etree.ElementTree as ET
      tree = ET.parse("test.xml")
    root = tree.getroot()
    #显示父节点
    print(root.tag)
        
    #遍历xml文档
    for child in root:
        print(child.tag, child.attrib)
        for i in child:
            print(i.tag,i.text)
        
    #只遍历year 节点
    for node in root.iter('year'):
        print(node.tag,node.text)

    使用模块创建xml文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import xml.etree.ElementTree as ET
      
    new_xml = ET.Element("namelist")
    name = ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"})
    age = ET.SubElement(name,"age",attrib={"checked":"no"})
    sex = ET.SubElement(name,"sex")
    sex.text = '33'
    name2 = ET.SubElement(new_xml,"name",attrib={"enrolled":"no"})
    age = ET.SubElement(name2,"age")
    age.text = '19'
      
    et = ET.ElementTree(new_xml) #生成文档对象
    et.write("test.xml", encoding="utf-8",xml_declaration=True)
      
    ET.dump(new_xml) #打印生成的格式

    修改或者删除

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    import xml.etree.ElementTree as ET
      
    tree = ET.parse("xmltest.xml")
    root = tree.getroot()
      
    #修改
    for node in root.iter('year'):
        new_year = int(node.text) + 1
        node.text = str(new_year)
        node.set("updated","yes")
      
    tree.write("xmltest.xml")
      
      
    #删除node
    for country in root.findall('country'):
       rank = int(country.find('rank').text)
       if rank > 50:
         root.remove(country)
      
    tree.write('output.xml')

    二、shutil

    高级的 文件、文件夹、压缩包 处理模块

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import shutil
    #将文件内容拷贝到另一个文件中,可以部分内容
    with open('log.log','r') as file1,open('test_con','w') as file2:
        shutil.copyfileobj('file1','file2')
    #拷贝文件
    shutil.copyfile('log.log','log')
    #拷贝文件权限
    shutil.copymode('log.log','log')
    shutil.copystat(src, dst)
    #拷贝状态的信息,包括:mode bits, atime, mtime, flags
     
    shutil.copy(src, dst)
    #拷贝文件和权限
    shutil.copy2(src, dst)
    #拷贝文件和状态信息
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #将 /opt/test 下的文件打包放置当前程序目录
      
    import shutil
    ret = shutil.make_archive("wwwwwwwwww", 'gztar', root_dir='/opt/test')
      
      
    #将 /opt/test 下的文件打包放置 /root/目录
    import shutil
    ret = shutil.make_archive("/root", 'gztar', root_dir='/opt/test')

    shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import zipfile
     
    # 压缩
    z = zipfile.ZipFile('laxi.zip', 'w')
    z.write('a.log')
    z.write('data.data')
    z.close()
     
    # 解压
    z = zipfile.ZipFile('laxi.zip', 'r')
    z.extractall()
    z.close()

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import tarfile
     
    # 压缩
    tar = tarfile.open('your.tar','w')
    tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip')
    tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip')
    tar.close()
     
    # 解压
    tar = tarfile.open('your.tar','r')
    tar.extractall()  # 可设置解压地址
    tar.close()
    复制代码

     





  • 相关阅读:
    【转】浅谈Node.js单线程模型
    进程
    网络编程:tcp、udp、socket、struct、socketserver
    Python基础练习
    面向对象:其他双下方法
    isinstance、issubclass、反射
    面向对象:__getitem__、__setitem__、__delitem__
    面向对象:classmethod、staticmethod、property
    面向对象:继承、多态、封装
    异常处理
  • 原文地址:https://www.cnblogs.com/liu-yao/p/5219518.html
Copyright © 2020-2023  润新知