我们的目的是类似虚拟机的挂起操作
在没学json与pickle之前我们通常这样。
#序列化 a={ 'name':'qiangql', 'age':22 } f=open('text.text','w') f.write(str(a)) #这里用str把字典变成了字符串 f.close()
#反序列化 f=open('text.text','r') b=eval(f.read()) #这里用eval把字符串变成了可执行的字典 f.close() print(b['age'])


1 C:\Users\qiangql\AppData\Local\Programs\Python\Python36-32\python.exe C:/Users/qiangql/PycharmProjects/untitled/内置函数测.py 2 22 3 4 Process finished with exit code 0
json方法,json 可以跨平台,但是不支持日期!!!!
#序列化json import json a={ 'name':'qiangql', 'age':22 } f=open('text1.text','w') f.write(json.dumps(a)) #这里也可写为json.dump(a,f) json.dump(a,f) f.close()
#反序列化jeson import json f=open('text1.text','r') # data=json.loads(f.read()) data=json.load(f) print(data['age'])


1 C:\Users\qiangql\AppData\Local\Programs\Python\Python36-32\python.exe C:/Users/qiangql/PycharmProjects/untitled/反序列化.py 2 22 3 4 Process finished with exit code 0
pickle方法,支持所有pyhton格式
#序列化pickle import pickle def sayhello(name): print('hello',name) a={ 'name':'qiangql', 'age':22, 'func':sayhello } f=open('text11.text','wb') #二进制,因为他支持多平台,所以这里是多平台都能识别的二进制 pickle.dump(a,f) ### f.write(pickle.dumps(a)) f.close()
#反序列化 import pickle def sayhello(name): print('hello',name) f=open('text11.text','rb') data=pickle.load(f) ###data=pickle.loads(f.read()) print(data['age']) print(data['func']('qiangql'))


1 C:\Users\qiangql\AppData\Local\Programs\Python\Python36-32\python.exe C:/Users/qiangql/PycharmProjects/untitled/picket反序列化.py 2 22 3 hello qiangql 4 None 5 6 Process finished with exit code 0
这里要注意一点,所有的序列化,都只能挂起一次,然后反序列化一次,不能多次进行挂起操作,因为反序列化只能一次。
本文详细介绍了Python中序列化与反序列化的概念及应用,包括使用str、eval进行简单序列化,json方法实现跨平台序列化,以及pickle方法支持复杂Python对象的序列化。文章通过实例演示了序列化与反序列化的过程,并强调了每种方法的特点和限制。

被折叠的 条评论
为什么被折叠?



