zoukankan      html  css  js  c++  java
  • python整理-day7

    1、模块

      1、configparser

          

    conf文件
    [wzc]
    haha = 123
    
    [zzz]
    heihei = 333
    
    程序文件
    import configparser
    
    config=configparser.ConfigParser()
    config.read('conf',encoding='utf-8')
    ret=config.sections()
    print(ret)
    
    
    config1=configparser.ConfigParser()
    config1.read('conf',encoding='utf-8')
    ret1=config.items('wzc')
    print(ret1)
    
    config2=configparser.ConfigParser()
    config2.read('conf',encoding='utf-8')
    value=config2.options('wzc')
    print(value)
    
    config3=configparser.ConfigParser()
    config3.read('conf',encoding='utf-8')
    
    v=config3.get('wzc','haha')
    v1=config3.getint('wzc','haha')
    #v2=config3.getfloat()
    #v3=config3.getboolean()
    print(v,type(v))
    print(v1,type(v1))
    
    has_sec=config3.has_section('wzc')
    print(has_sec)
    
    config3.remove_section('zzz')
    config3.write(open('conf','w'))
    
    config3.add_section('zzz')
    config3.write(open('conf','w'))
    
    has_opt=config3.has_option('zzz','heihei')
    print(has_opt)
    
    config3.remove_option('zzz','heihei')
    config3.write(open('conf','w'))
    
    config3.set('zzz','heihei','333')
    config3.write(open('conf','w'))
    

    结果:

    ['wzc', 'zzz']
    [('haha', '123')]
    ['haha']
    123 <class 'str'>
    123 <class 'int'>
    True
    False
    

      configparser模块需要注意的地方

        模块胡IBA数字和字符串都当做字符串来处理,如果非要输入数字,可以使用getint来进行输入,这样得到的就含有数字。

    xml模块

      xml文件

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

      xml模块,我们主要用到elementTree这个功能,每一个节点都是一个element对象

    我们在使用的时候又两种方法,一种是直接使用element,还有一种是elementTree然后再使用element。

    但是这两者之前还是有区别的,区别就是elementTree上面,为了我们把Xml配置读取以后,还是要进行写入的,如果不使用elementTree的话我们无法进行写入文件的操作

    from xml.etree import ElementTree as ET
    
    tree=ET.parse('xml')
    root=tree.getroot()
    #print(root)
    
    for child in root:
        #print(child.tag,child.attrib)
        for cchild in child:
            print(cchild.tag,child.attrib)
    

      结果:

    rank {'name': 'Liechtenstein'}
    year {'name': 'Liechtenstein'}
    gdppc {'name': 'Liechtenstein'}
    neighbor {'name': 'Liechtenstein'}
    neighbor {'name': 'Liechtenstein'}
    rank {'name': 'Singapore'}
    year {'name': 'Singapore'}
    gdppc {'name': 'Singapore'}
    neighbor {'name': 'Singapore'}
    rank {'name': 'Panama'}
    year {'name': 'Panama'}
    gdppc {'name': 'Panama'}
    neighbor {'name': 'Panama'}
    neighbor {'name': 'Panama'}
    

    newxml.xml

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

      

    from xml.etree import ElementTree as ET
    
    set_xml=open('xml').read()
    root=ET.XML(set_xml)
    print(root)
    
    for node in root.iter('year'):
        print(node)
        new_year=int(node.text) + 1
        node.text=str(new_year)
    
        node.set('name','wzc')
        node.set('age','16')
    
        del node.attrib['name']
    tree=ET.ElementTree(root)
    tree.write('newxml.xml',encoding='utf-8')
    

      结果:

    <Element 'data' at 0x101121138>
    <Element 'year' at 0x10172f048>
    <Element 'year' at 0x10172f228>
    <Element 'year' at 0x10172f3b8>
    

      

    from xml.etree import ElementTree as ET
    
    root=ET.Element('home')
    
    son1=ET.Element('son',{'name':'son1'})
    son2=ET.Element('son',{'name':'son2'})
    
    grandson1=ET.Element('grandson',{'name':'grandson1'})
    grandson2=ET.Element('grandson',{'name':'grandson2'})
    
    son1.append(grandson1)
    son2.append(grandson2)
    
    root.append(son1)
    root.append(son2)
    
    tree=ET.ElementTree(root)
    tree.write('xx.xml',encoding='utf-8',xml_declaration=True,short_empty_elements=False)
    

      结果:

    <?xml version='1.0' encoding='utf-8'?>
    <home><son name="son1"><grandson name="grandson1"></grandson></son><son name="son2"><grandson name="grandson2"></grandson></son></home>
    

      如果要换行的话,需要加几条代码

    def prettify(elem):
        """将节点转换成字符串,并添加缩进。
        """
        rough_string = ET.tostring(elem, 'utf-8')
        reparsed = minidom.parseString(rough_string)
        return reparsed.toprettyxml(indent="	")
    

    zipfile和tarfile模块,这两个模块是压缩解压用的

    import zipfile
    z=zipfile.ZipFile('123.zip','w')
    #z=zipfile.ZipFile('123.zip','a')
    
    z.write('conf')
    zipfile.ZipFile('123.zip','r')
    z.extractall()
    z.close()
    
    import tarfile
    tar=tarfile.open('222.tar','w')
    tar.add('1-1.py',arcname='s1.py')
    tar.add('2-1.py')
    tar.close()
    
    tar=tarfile.open('222.tar','r')
    tar.extractall()
    tar.close()
    

      

    subprocess模块

    通过这个模块可以执行shell命令,同时这个有一个popen功能,可以尝试用这个模块进行expect的功能

      

    import subprocess
    
    ret=subprocess.call(["ls","-l"],shell=False)
    ret1=subprocess.call("ls -l",shell=True)
    
    obj=subprocess.Popen(["su"],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,universal_newlines=True)
    

      结果:

    total 104
    -rw-r--r--  1 wangzhichao  staff  946 Jun 19 10:33 1-1.py
    -rw-r--r--  1 wangzhichao  staff  213 Jun 23 18:40 2-1.py
    -rw-r--r--  1 wangzhichao  staff  358 Jun 19 11:52 3-1.py
    -rw-r--r--  1 wangzhichao  staff  449 Jun 19 14:54 4-1.py
    -rw-r--r--  1 wangzhichao  staff  328 Jun 19 15:05 5-1.py
    -rw-r--r--  1 wangzhichao  staff  227 Jun 19 15:48 6-1.py
    -rw-r--r--  1 wangzhichao  staff  365 Jun 19 17:09 7-1.py
    -rw-r--r--  1 wangzhichao  staff  415 Jun 19 18:09 8-1.py
    -rw-r--r--  1 wangzhichao  staff  338 Jun 19 18:28 9-1.py
    -rw-r--r--  1 wangzhichao  staff   44 Jun 23 18:16 conf
    -rw-r--r--  1 wangzhichao  staff  717 Jun 24 10:46 newxml.xml
    -rw-r--r--  1 wangzhichao  staff  690 Jun 19 11:12 xml
    -rw-r--r--  1 wangzhichao  staff  174 Jun 24 12:13 xx.xml
    

      

    python是支持函数式+面向对象式编程

    OOP:(面向对象)

    面向对象的三大特性是指:封装、继承和多态

     类里面必须要在函数加一个self

    面向对象:类,对象

    a。创建类

      class 类名:

        def 方法名(self,xxx):

          pass

    b。创建对象

      对象=类名()

    c。通过对象执行方法

      对象.方法名(123)

    什么时候用面向对象,当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可

    self 是什么?

      self是一个Python自动会给传值的参数

      哪个对象的执行方法,self就是谁

      obj.fetch('select')。。。。。self=obj

    构造方法

      类中有一个特殊的方法,__init__,类()自动被执行

    class SQLhelp:
        def __init__(self,host,user,pwd):
            self.ho=host
            self.us=user
            self.pw=pwd
        def fetch(self,sql):
            print(self.ho,self.us, self.pw)
            pass
        def create(self,sql):
            pass
        def remove(self,nid):
            pass
    
    
    host1="10.11.1.1"
    user1='wzc'
    pwd1='8888'
    
    obj=SQLhelp(host1,user1,pwd1)
    obj.fetch("wahhhh")
    

      结果:

    10.11.1.1 wzc 8888
    

      

    Python可以有多继承,其他余元只有单继承

    父类、子类,基类、派生类

    优先级是自己里面的最高,所以在寻找方法的时候,优先找自己的

    class c1:
        def __init__(self,name,obj):
            self.name=name
            self.obj=obj
    
    class c2:
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def show(self):
            print(self.name)
    class c3:
        def __init__(self,name):
            self.money=11
            self.aaa=name
    
    c2_obj=c2('wzc',18)
    c1_obj=c1('www',c2_obj)
    c3_obj=c3(c1_obj)
    
    
    #print(c1_obj.obj.show())
    c3_obj.aaa.obj.show()
    

      结果

    wzc
    

      

    继承关系:

      优先级根据继承顺序,左边优先级高

    所以这个寻找方法最后总结就是两种方式,分别是深度优先和广度优先

  • 相关阅读:
    ArcObjects SDK(AE)10.1在vs2012安装的方法(亲测,并未成功,尝试需谨慎)
    PTA 求链式表的表长
    PTA 输出数组元素
    PTA 找出不是两个数组共有的元素
    PTA 将数组中的数逆序存放
    PTA 利用指针找最大值
    PTA 有序数组的插入
    PTA 冒泡排序
    PTA 报数
    PTA 数组循环右移
  • 原文地址:https://www.cnblogs.com/wlzhc/p/5611500.html
Copyright © 2011-2022 走看看