zoukankan      html  css  js  c++  java
  • day07 configparser xml subprocess 面向对象

    一、configparser

    .sections() : 返回所有可用的section
    .addsection(sectionname) :添加section
    .set(sectionname, optionname, optionvalue): 添加option
    .hassection(sectionname) :判断
    .options(sectionname) : 返回section下可用的option
    .hasoption(sectionname, optionname) : 判断
    .read(filename) : 读取文件
    .wrie(filename) : 将RawConfigParser对象写到文件中
    .get(sectionname, optionname) : 获取值, 默认的是返回string类型
    .getfloat, .getint, .getboolean : 获取不同类型的返回值,参数和get的参数一样
    .items(sectionname) :列出section下的所有key:value
    .remove(sectionname) :删除section
    .remove(sectionname, option_name) : 删除section下的某个option

    config = configparser.ConfigParser()
    config.read('config_test_file',encoding='utf-8')
    
    ret = config.sections()         #获取所有的section
    print(ret)
    
    ret_item = config.items('section1')   #获取指定section下的所有key  value
    print(ret_item)
    
    ret_key = config.options('section1')  #获取指定section下的所有key
    print(ret_key)
    
    ret_value = config.get('section1','k1')   #获取指定section下的所有value
    print(ret_value)
    
    
    has_sec = config.has_section('section')   #检查文件中是否有此section
    print(has_sec)
    
    config.add_section('section3')    #增加一个section
    config.write(open('config_test_file','w'))
    
    
    config.remove_section('section3')   #删除一个section
    config.write(open('config_test_file','w'))

    # -* - coding: UTF-8 -* -
    import configparser
    #生成config对象
    conf = configparser.ConfigParser()
    #用config对象读取配置文件
    conf.read("ConfigParser_test.conf")
    
    #以列表形式返回所有的section
    sections = conf.sections()
    print('sections:', sections)         #sections: ['sec_b', 'sec_a']
    #得到指定section的所有option
    options = conf.options("sec_a")
    print('options:', options)           #options: ['a_key1', 'a_key2']
    #得到指定section的所有键值对
    kvs = conf.items("sec_a")
    print('sec_a:', kvs)                 #sec_a: [('a_key1', '20'), ('a_key2', '10')]
    #指定section,option读取值
    str_val = conf.get("sec_a", "a_key1")
    int_val = conf.getint("sec_a", "a_key2")
    
    print("value for sec_a's a_key1:", str_val)   #value for sec_a's a_key1: 20
    print("value for sec_a's a_key2:", int_val)   #value for sec_a's a_key2: 10
    
    #写配置文件
    #更新指定section,option的值
    conf.set("sec_b", "b_key3", "new-$r")
    #写入指定section增加新option和值
    conf.set("sec_b", "b_newkey", "new-value")
    #增加新的section
    conf.add_section('a_new_section')
    conf.set('a_new_section', 'new_key', 'new_value')
    #写回配置文件
    conf.write(open("ConfigParser_test.conf", "w"))
    #ConfigParser_test.conf配置文件
    
    [sec_a]
    a_key1 = 20
    a_key2 = 10
    
    [sec_b]
    b_key1 = 121
    b_key2 = b_value2
    b_key3 = new-$r
    b_key4 = 127.0.0.1
    b_newkey = new-value
    
    [a_new_section]
    new_key = new_value

    更多请看  http://blog.sina.com.cn/s/blog_65a8ab5d0101ffqq.html

    二、xml

    什么是XML?

    XML 指可扩展标记语言(eXtensible Markup Language)。 你可以通过本站学习XML教程

    XML 被设计用来传输和存储数据。

    XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。

    它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。

    xml.etree.ElementTree

      ElementTree生来就是为了处理XML,它在Python标准库中有两种实现:一种是纯Python实现的,如xml.etree.ElementTree,另一种是速度快一点的xml.etree.cElementTree。注意:尽量使用C语言实现的那种,因为它速度更快,而且消耗的内存更少。

    try: 
      import xml.etree.cElementTree as ET 
    except ImportError: 
      import xml.etree.ElementTree as ET

        这是一个让Python不同的库使用相同API的一个比较常用的办法,而从Python 3.3开始ElementTree模块会自动寻找可用的C库来加快速度,所以只需要import xml.etree.ElementTree就可以了。

    三、subprocess

    subprocess最简单的用法就是调用shell命令了,另外也可以调用程序,并且可以通过stdout,stdin和stderr进行交互。

    http://www.1sohu.com/newsHtm/51/n_52851.shtml

    四、面向对象

    #!/usr/bin/env python
    # _*_ conding:utf-8_*_
    
    #模拟数据库
    #函数式编程:
    def create(host,ip,username,passwd,sql):
        pass
    def remove(host,ip,username,passwd,sql):
        pass
    def modify(host,ip,username,passwd,sql):
        pass
    def fetch(host,ip,username,passwd,sql):
        pass
    #这几个函数中有几个相同的参数,每次调用函数时都需要传入这几个相同的函数:
    
    create('test_host','1.1.1.1','xuanouba','test123','select...')
    
    #面向对象编程
    
    #封装
    class SQLHelper:
        def create(self,sql):
            pass
        def remove(self,sql):
            pass
        def modify(self,sql):
            pass
        def fetch(self,sql):
            pass
    
    #在通过SQLHelper类创建一个对象时:
    obj = SQLHelper()
    #可对obj对象设置几个值:
    obj.hhost = '...'
    obj.iip = '...'
    obj.uusername = '...'
    obj.ppasswd = '...'
    
    #在执行类中某个方法时,不需要再输入以上几个函数,因为以上已经封装到对象中:
    obj.create('sql')
    #类中的函数中的self此时即为封装的那几个值
    
    
    #构造方法
    #在通过类来创建对象时,类会自动执行__init__函数
    class SQLHelper:
        def __init__(self,one,two,three):
            self.ip = one
            self.username = two
            self.passwd = three
    
    
        def create(self,sql):
            pass
        def remove(self,sql):
            pass
        def modify(self,sql):
            pass
        def fetch(self,sql):
            pass
    #这样在调用类中的方法时更方便,直接加相应参数即可
    '''obj = SQLHelper(1.1.1.1,'xuanouba','test1234')'''
    
    
    
    
    #类中的构造函数(其他方法也可以)中的封装的参数可以是任意类型,包括自定义类型
    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('name: {}'.format(self.name))
            print('age: {}'.format(self.age))
    
    
    class c3:
    
        def __init__(self,obj):
            self.obj = obj
    
    c2_obj = c2('xuanouba',18)
    c1_obj = c1('cxl',c2_obj)
    
    c1_obj.obj.show()          #c1_obj对象的封装的obj为c2_obj对象,所以c1_obj.obj.show是调用c2_obj对象的show()方法
    
    c3_obj = c3(c1_obj)
    c3_obj.obj.obj.show()     #c3_obj.obj = c1_obj  那么可表示为 c1_obj.obj   c1_obj.obj = c2.obj  那么可表示为 c2.obj.show   所以最终结果是调用c2类的show方法
    
    #继承
    
    class F1:
        def show(self):
            self.name = 'F1'
            print(self.name)
    
    class F2(F1):
        def bar(self):
            print('F2')
    
    
    f2 = F2()
    f2.show()
  • 相关阅读:
    一般图最大匹配-带花树算法学习笔记
    网络流建图/模型总结
    博弈论学习笔记
    2019牛客暑期多校训练营(第二场)题解
    AtCoder Beginner Contest 131 F
    AtCoder Beginner Contest 130 F Minimum Bounding Box 三分法求极值(WA)
    最长上升子序列(LIS)长度及其数量
    Codeforces 1195E. OpenStreetMap (单调队列)
    Educational Codeforces Round 65 E,F
    最小生成树
  • 原文地址:https://www.cnblogs.com/xuanouba/p/5615653.html
Copyright © 2011-2022 走看看