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