Python里字典类型(Dict)的数据进行保存的时候可以用借用pickle序列化的方式,
同时pickle序列化可以保存python里复杂的数据模型, 但缺点是无法用本的记事本打开直观的查看数据内容:
import pickle
def save_obj(obj, name ):
with open('obj/'+ name + '.pkl', 'wb') as f:
pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL)
def load_obj(name ):
with open('obj/' + name + '.pkl', 'rb') as f:
return pickle.load(f)
而在Python语言中,json数据与dict字典以及对象之间的转化,是必不可少的操作,
所以我们可以考虑转换成json格式,然后再进行读取保存。
import json
dict = {'a': 'wo', 'b': 'zai', 'c': 'zhe', 'd': 'li'}
string = json.dumps(dict)
print(dict)
print(string)
print(type(dict))
print(type(string))
with open(r'C:\Users\zy\Documents\GitHub\python3\searchTest\json.json','w')as f:
f.write(string)
1 {'a': 'wo', 'b': 'zai', 'c': 'zhe', 'd': 'li'}
2 {"a": "wo", "b": "zai", "c": "zhe", "d": "li"}
3
4
如果没有进行转换,则会报错:TypeError: write() argument must be str, not dict
同时这里要注意, 如果dict中有中文,dump()会输出中文的ascil编码,所以需要将默认参数ensure_ascii = False
,同时常见还有参数indent
控制输出的str字符之间的间隔大小。
friends={"name":"王虎","name1":"张二","name2":"姚晨"}
print(json.dumps(friends,ensure_ascii=False ,indent =3 ))
dict = {'a': 'wo', 'b': 'zai', 'c': 'zhe', 'd': 'li'}
dumps = json.dumps(dict)
loads = json.loads(dumps)
print(dict)
print(dumps)
print(loads)
print(type(dict))
print(type(dumps))
print(type(loads))
{'a': 'wo', 'b': 'zai', 'c': 'zhe', 'd': 'li'}
{"a": "wo", "b": "zai", "c": "zhe", "d": "li"}
{'a': 'wo', 'b': 'zai', 'c': 'zhe', 'd': 'li'}
dict = {'a': 'wo', 'b': 'zai', 'c': 'zhe', 'd': 'li'}
json.dump(dict,open(r'C:\Users\zy\Documents\GitHub\python3\searchTest\json.json','w'))
filename = (r'C:\Users\zy\Documents\GitHub\python3\searchTest\json.json')
jsObj = json.load(open(filename))
print(jsObj)
print(type(jsObj))
{'a': 'wo', 'b': 'zai', 'c': 'zhe', 'd': 'li'}