写代码技巧,单一文件都转化为列表处理
其中有一个非常好的技巧就是当用户传入单一文件,就将这个文件放入一个列表中,若用户传入一个可迭代对象,直接进行跌倒
def read(self,filenames,encoding=None):
if isinstance(filenames,str):
filenames = [filenames] #若是字符串直接放入list,后续跌倒
read_ok = []
for filenmae in filenames: #若本身传入list,直接进行跌倒
try:
with open(filename,encoding=encoding) as fp:
self._read(fp,filename)
except OSError:
continue
read_ok.append(filename)
return read_ok
ini配置文件读取
配置文件名称config.ini内容如下:
[DEFAULT]
a = test
[mysqld]
tickTime=5000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/log
clientPort=2181
maxClientCnxns=120
autopurge.snapRetainCount=1000
autopurge.purgeInterval=1
server.69=10.103.101.168:2888:3888
server.70=10.103.101.96:2888:3888
cfg实例的内容值本身就是一个字典,因此可以按照字典的形式进行对其访问
采用常规读取配置文件
import configparaser
filename = 'config.ini'
cfg = configparser.ConfigParser()
cfg.read(filename)
sections = cfg.sections() #section为【mysqld】类似此内容
for sect in sections:
options = cfg.options(sect)
for option in options: #option类似port=3306 中的port
val = cfg.get(sect,option)
print(val)
运行结果:
5000
10
5
/data/zookeeper/data
/data/zookeeper/log
2181
120
1000
1
10.103.101.168:2888:3888
10.103.101.96:2888:3888
test
字典方式访问读取ini配置文件
import configparser
filename = 'config.ini'
cfg = configparser.ConfigParser()
cfg.read(filename)
sections = cfg.sections()
for sect in sections:
for item in cfg.items(sect):
k,v = item
print(k,v)
运行结果:
a test
ticktime 5000
initlimit 10
synclimit 5
datadir /data/zookeeper/data
datalogdir /data/zookeeper/log
clientport 2181
maxclientcnxns 120
autopurge.snapretaincount 1000
autopurge.purgeinterval 1
server.69 10.103.101.168:2888:3888
server.70 10.103.101.96:2888:3888
完全当字典使用
本质上和json格式并无区别,section就是字典中的key,option就是value,而option本身又是字典,所以可以直接按照字典形式进行访问
import configparser
filename = 'config.ini'
cfg = configparser.ConfigParser()
cfg.read(filename)
print(cfg['mysqld']['tickTime'])
for k,v in cfg['mysqld'].items():
print(k,v)
运行结果:
5000
ticktime 5000
initlimit 10
synclimit 5
datadir /data/zookeeper/data
datalogdir /data/zookeeper/log
clientport 2181
maxclientcnxns 120
autopurge.snapretaincount 1000
autopurge.purgeinterval 1
server.69 10.103.101.168:2888:3888
server.70 10.103.101.96:2888:3888
a test
configparse的写入磁盘方法
如mysql.ini是配置模板,根据配置模板通过configparse的添加section及option等方法在内存中操作后,保存写入磁盘文件
import configparser
filename = 'config.ini'
cfg = configparser.ConfigParser()
cfg.read(filename)
cfg.set('mysqld','port','3306')
with open('cfg.ini','wt') as f:
cfg.write(f) #写入磁盘的方法
运行结果:#增加一个配置文件,打开配置文件可知如下操作
[DEFAULT]
a = test
[mysqld]
ticktime = 5000
initlimit = 10
synclimit = 5
datadir = /data/zookeeper/data
datalogdir = /data/zookeeper/log
clientport = 2181
maxclientcnxns = 120
autopurge.snapretaincount = 1000
autopurge.purgeinterval = 1
server.69 = 10.103.101.168:2888:3888
server.70 = 10.103.101.96:2888:3888
port = 3306