python序列化pickle模块和json模块简单学习
2018-01-01 16:36
876 查看
序列化:把变量从内存中变成可存储或传输的过程,在Python中叫pickling,在其他语言中也被称serialization,marshalling,flattening等等
反序列化:把变量内容从序列化的对象重新读到内存里
pcikel模块实现序列化
函数介绍:
pickel.dumps() 将一个对象序列化为一个bytes
pickle.dump() 直接吧对象序列花并写入一个file-like object
pickle.loads() 将bytes反序列化为一个对象
pickle.load() 直接从一个file-like object反序列化出对象
简单代码实例
json模块实现序列化和反序列化
json和python内置数据类型对应关系:
JSON类型 Python类型
{} dict
[] list
“string” str
1234.56 int或float
true/false True/False
null None
函数介绍:
json.dumps() 将一个对象序列化为一个str
json.dump() 直接吧对象序列花并写入一个file-like object
json.loads() 将json str反序列化为一个对象
json.load() 直接从一个file-like object反序列化出对象
简单代码实例
说明:
实例中包括dict的序列化反序列化和class实例的序列化和反序列化;
对于class实例在序列化时需要传入default参数,用来实现class实例和dict的转化,此处因为所有实例都有一个dict属性,所以可以用lambda表达式如下,序列化的过程为先吧class实例转化为dict,再序列化;
在反序列化时需要先序列化为dict,再用object_hook参数传入的转化函数将dict转化为class实例。
反序列化:把变量内容从序列化的对象重新读到内存里
pcikel模块实现序列化
函数介绍:
pickel.dumps() 将一个对象序列化为一个bytes
pickle.dump() 直接吧对象序列花并写入一个file-like object
pickle.loads() 将bytes反序列化为一个对象
pickle.load() 直接从一个file-like object反序列化出对象
简单代码实例
#pickle模块的序列化,pickle序列化时是得到一个bytes import pickle d = dict(name='duan',age=45) #利用pickle.dumps并写入文件 b = pickle.dumps(d) #序列化为bytes f = open('se.txt','wb') f.write(b) f.close() #利用pickle.dump直接吸入一个file-like object f = open('se.txt','wb') pickel.dump(d,f) f.close() #反序列化,利用pickle.loads f = open('se.txt','rb') bs = f.read() print(pickle.loads(bs)) f.close() #反序列化,利用pickle.load直接反序列化一个file-like object f = open('se.txt','rb') print(pickle.load(f)) f.close()
json模块实现序列化和反序列化
json和python内置数据类型对应关系:
JSON类型 Python类型
{} dict
[] list
“string” str
1234.56 int或float
true/false True/False
null None
函数介绍:
json.dumps() 将一个对象序列化为一个str
json.dump() 直接吧对象序列花并写入一个file-like object
json.loads() 将json str反序列化为一个对象
json.load() 直接从一个file-like object反序列化出对象
简单代码实例
说明:
实例中包括dict的序列化反序列化和class实例的序列化和反序列化;
对于class实例在序列化时需要传入default参数,用来实现class实例和dict的转化,此处因为所有实例都有一个dict属性,所以可以用lambda表达式如下,序列化的过程为先吧class实例转化为dict,再序列化;
在反序列化时需要先序列化为dict,再用object_hook参数传入的转化函数将dict转化为class实例。
#json序列化,json序列化为一个str import json d = dict(name='bob',age =23) #利用json.dumps序列化并写入一个文件 f = open('json.txt','w') jt = json.dumps(d) f.write(jt) f.close() #利用json.dump直接序列化写入一个file-like object f = open('json.txt','w') json.dump(d,f) #利用json.loads()反序列化得到一个dict f = open('json.txt','r') print(json.loads(f.read())) f.close() #利用json.load()直接反序列化一个file-like object f = open('json.txt','r') print(json.load(f)) f.close() 91cd #实现class实例的序列化和反序列 import json class Student(object): def __init(self,name,age): self.name = name self.age = age #在实现序列化时我们需要定义一个转化函数,将class实例转化为dict在序列化 def student2dict(obj): return { 'name':obj.name, 'age':obj.age } #在反序列化先反序列化为一个dict,同时我们也需要一个函数,将dict转化为class实例 def dict2student(di): reutrn Student(di['name'],di['age']) #序列化 s = Student('bob',23) print(json.dumps(s,default=student2dict)) #对于序列化时的转化函数,由于class实例都有一个__dict__属性,记录实例变量故 print(json.dumps(s,defailt= lambda obj:obj.__dict__)) #反序列化 json_str='{"name":"bob","age":23}' print(json.loads(json_str,object_hook=dict2student))
相关文章推荐
- python学习之路(json & pickle 模块 ---序列化,反序列化)
- Python模块:shutil、序列化(json&pickle&shelve)、xml
- python3----模块(序列化(json&pickle)+XML+requests)
- python 序列化及其相关模块(json,pickle,shelve,xml)详解
- python序列化模块json和pickle
- 学习廖雪峰Python3教程的python序列化json模块的小笔记
- python序列化模块json和pickle
- python序列化 pickle,json模块
- python 之序列化(pickle模块和json模块)
- Python3 学习第十三弹: 模块学习五之pickle与json
- Python学习心得(五) random生成验证码、MD5加密、pickle与json的序列化和反序列化
- Python模块学习 ---- pickle, cPickle 对象序列化/反序列化
- Python模块知识4:序列化Json/pickle
- Python--模块之sys模块、logging模块、序列化json模块、序列化pickle模块
- python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)
- Python基础(12)_python模块之sys模块、logging模块、序列化json模块、pickle模块、shelve模块
- Python模块学习 ---- pickle, cPickle 对象序列化/反序列化
- python常见模块之序列化(json与pickle以及shelve)
- python全栈开发-json和pickle模块(数据的序列化)
- Python序列化模块json和pickle