json和pickle的数据序列化
我们的目的是类似虚拟机的挂起操作
在没学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
这里要注意一点,所有的序列化,都只能挂起一次,然后反序列化一次,不能多次进行挂起操作,因为反序列化只能一次。