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()

posted on 2016-06-25 00:55  宣欧巴  阅读(200)  评论(0编辑  收藏  举报