需求
读取mysql下的mysql.ini配置文件,并讲配置文件转化为字典并采用不同方法进行序列化
代码实现
# -*- coding: UTF-8 -*-
import configparser
import json
import pickle
def series(filename,sdump=pickle.dumps):
"""
This function is to serieation a object
sdump=pickle.dumps or sdump=json.dumps
"""
cfg = configparser.ConfigParser()
cfg.read(filename)
ini_dict = {}
for k in cfg.keys():
dictkv = {}
for key,val in cfg.items(str(k)):
dictkv[key] = val
ini_dict[k] = dictkv
with open('test','wb') as f: #序列化保存到磁盘
#f.write(str(series('mysql.ini',sdump=pickle.dumps)))
pickle.dump(ini_dict,f)
j = sdump(ini_dict)
return type(j),j
print(series('mysql.ini',sdump=pickle.dumps))
#print(series('mysql.ini',sdump=json.dumps))
运行结果:
(<class 'bytes'>, b'\x80\x03}q\x00(X\x05\.......)
代码优化
优化思路
- 在ini配置文件中本身是嵌套字典,因此在生成字典时
for k,v in cfg.items():
ini_dict[k] = dict(cfg.items(k))
代码实现
# -*- coding: UTF-8 -*-
import configparser
import json
import pickle
import argparse
def series(filename,sdump=pickle.dumps):
"""
This function is to serieation a object
sdump=pickle.dumps or sdump=json.dumps
"""
cfg = configparser.ConfigParser()
cfg.read(filename)
ini_dict = {}
#method1
#for k in cfg.keys():
# _d = {}
# for key,val in cfg.items(str(k)):
# _d[key] = val
# ini_dict[k] = _d
#method2
for k,v in cfg.items():
ini_dict[k] = dict(cfg.items(k))
with open('test','wb') as f:
pickle.dump(ini_dict,f)
j = sdump(ini_dict)
return type(j),j
print(series('mysql.ini',sdump=pickle.dumps))
#print(series('mysql.ini',sdump=json.dumps))