下面介绍Python如何使用Json、Pickle模块
这两个模块用于序列化
一、什么是序列化
#序列化:内存----》字符串 pickle.dumps 、pickle.dump
将内存中的数据转换为字符串,保存在本地的过程,叫序列化
#反序列化:字符串-----》内存 pickle.loads 、pickle.load
从将本地硬盘中的数据读到内存中的过程,叫反序列化
二、Python与Json模块
A、json,用于字符串 和 python数据类型间进行转换;
B、Json模块提供了四个功能:dumps、dump、loads、load;
C、示例代码:
import jsondata={ 'k1':123,'k2':'Hello'}#json.dumps 将数据通过特殊的形式转换为所有程序语言都认识的字符串j_str=json.dumps(data) print(j_str)#json.dump 将数据通过特殊的形式转换为所有程序语言都认识的字符串,并写入文件with open('result.json','w') as fp: json.dump(data,fp)
执行结果:
三、Python与Pickle模块
A、pickle,用于python特有的类型 和 python的数据类型间进行转换
B、pickle模块提供了四个功能:dumps、dump、loads、load;
C、示例代码:
import pickledata={ 'k1':123,'k2':'Hello'}#pickle.dumps 将数据通过特殊的形式转换为只有python程序语言认识的字符串p_str=pickle.dumps(data)print(p_str)#pickle.dump将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件with open('result.pk','w') as fp: pickle.dump(data,fp)
执行结果:
四、事例演绎:pickle模块
picklein.py:序列化过程
import pickle#往文件只写两种格式数据类型:byte与字符串account={ "id":6225353234, "credit":15000,#credit card "balance":8000, "expire_date":"2020-5-21", "password":"sdfsf"}# f = open("account.db","w")# f.write(str(account))# print(str(account))# f.close()f = open("account.db","wb")# f.write(pickle.dumps(account))等同下一句语句pickle.dump(account,f)f.close()
pickleout.py反序列化过程
#序列化:内存----》字符串 pickle.dumps#反序列化:字符串-----》内存 pickle.loads# f=open("account.db","r")# account=eval(f.read()) #eval数据转换# print(account)# print(account['id'])import picklef=open("account.db","rb")# account=pickle.loads(f.read())等同下一句语句account=pickle.load(f)print(account)print(account['id'])# account['balance'] -=3400# f = open("account.db","wb")# f.write(pickle.dumps(account))# f.close()
五、事例演绎:json模块
jsonin.py序列化过程:
import json as pickle#往文件只写两种格式数据类型:byte与字符串account={ "id":6225353234, "credit":15000,#credit card "balance":8000, "expire_date":"2020-5-21", "password":"sdfsf"}# f = open("account.db","w")# f.write(str(account))# print(str(account))# f.close()f = open("account.json","w")# f.write(pickle.dumps(account))等同下一句语句pickle.dump(account,f)f.close()
jsonout.py反序列化过程:
#序列化:内存----》字符串 pickle.dumps#反序列化:字符串-----》内存 pickle.loads# f=open("account.db","r")# account=eval(f.read()) #eval数据转换# print(account)# print(account['id'])import json as picklef=open("account.json","r")# account=pickle.loads(f.read())等同下一句语句account=pickle.load(f)print(account)print(account['id'])# account['balance'] -=3400# f = open("account.db","wb")# f.write(pickle.dumps(account))# f.close()
六、Json与Pickle两个模块区别
A、 Pickle模块支持Python中任何字符
示例:
import pickleimport datetime#往文件只写两种格式数据类型:byte与字符串account={ "id":6225353234, "credit":15000,#credit card "balance":8000, "expire_date":"2020-5-21", "password":"sdfsf", "register_date":datetime.datetime.now()}# f = open("account.db","w")# f.write(str(account))# print(str(account))# f.close()f = open("account.db","wb")# f.write(pickle.dumps(account))等同下一句语句pickle.dump(account,f)f.close()
执行结果:成功
B、 Json只支持str,int ,float, set ,dict, list, tuple
示例:
import json as pickleimport datetime#往文件只写两种格式数据类型:byte与字符串account={ "id":6225353234, "credit":15000,#credit card "balance":8000, "expire_date":"2020-5-21", "password":"sdfsf", "register_date":datetime.datetime.now()}# f = open("account.db","w")# f.write(str(account))# print(str(account))# f.close()f = open("account.json","w")# f.write(pickle.dumps(account))等同下一句语句pickle.dump(account,f)f.close()
执行结果:失败
七、Json与Pickle使用时要注意的地方
1、从以上的比较来看,这两个模块使用的方式是一样的,唯一区别就是在Python中,Pickle支持全部数据类型,Json支持的数据类型相对比较少
2、Json与Pickle允许dump多次,也允许load多次,但由于读取时没有循环功能,因为建议最好只允许dump一次。