Python之路--序列化
Posted ailsa-a
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之路--序列化相关的知识,希望对你有一定的参考价值。
序列化的目的
1.以某种存储形式使自定义对象持久化
2.将对象从一个地方传递到另一个地方
3.使程序更具有维护性
json
json多语言通用
四个功能:dumps、dump、loads、load
#将对象转换字符串,存储到文件中(dump) import json dic = {1:2,3:4,5:6} f = open(‘a1.txt‘,‘w‘,encoding=‘utf-8‘) s = json.dump(dic,f) print(s) 运行结果: 文件中已填写的内容:{"1": 2, "3": 4, "5": 6}
#将文件的字符串转换成原格式输出(load) f = open(‘a1.txt‘,‘r‘,encoding=‘utf-8‘) s1 = json.load(f) print(type(s1),s1) 运行结果: <class ‘dict‘> {‘1‘: 2, ‘3‘: 4, ‘5‘: 6}
将对象转换成字符串 import json lst = [1,2,3,4] s = json.dumps(lst) print(type(s),s) 运行结果: <class ‘str‘> [1, 2, 3, 4]
#将字符串转换成对象 lst = [1,2,3,4] s1 = json.loads(s) print(type(s1),s1) 运行结果: <class ‘list‘> [1, 2, 3, 4]
pickle
python独有的序列化
#将对象转换为文件(内容是字节,看不懂的字节) import pickle f = open(‘a2.py‘,‘wb‘) dic = {1:2,3:4} s = pickle.dump(dic,f) print(s) 运行结果:文件已填写内容,但是是一串看不懂的字节
#将字节文件转换成对象 f1 = open(‘a2.py‘,‘rb‘) s1 = pickle.load(f1) print(s1) 运行结果:{1: 2, 3: 4}
#将对象转换成字节 import pickle dic = {1:2,3:4} s = pickle.dumps(dic) print(s) 运行结果:b‘x80x03}qx00(Kx01Kx02Kx03Kx04u.‘
#将字节转换成对象 s1 = pickle.loads(s) print(s1) 运行结果: {1: 2, 3: 4}
shelve
shelve序列化,比之前讲的json和pickle都要简单,但是一般是用于自己在本地,若上线的话还需要json,但是它操作简单,比较方便
类似于字典的操作
import shelve f = shelve.open(‘a2‘) #创建了3个文件,a2.bak(是备份),这三个文件的内容都不要有任何的修改 f[‘name‘] = ‘alex‘ #增加键值对 f[‘age‘] = 18 print(f[‘name‘]) 打印结果:alex
若要修改里面已有的内容,需要特别注意一下,有可能会修改不成功,需要在,open(‘a2‘,writeback = True)
##实现修改name的操作 import shelve f = shelve.open(‘a2‘,writeback=True) f[‘name‘] = ‘baoyuan‘ print(f[‘name‘])
以上是关于Python之路--序列化的主要内容,如果未能解决你的问题,请参考以下文章