python基础——Json和Pickle

来源:互联网 发布:如果明朝没有灭亡知乎 编辑:程序博客网 时间:2024/05/29 19:46

Json
Json是能跨语言序列化数据,也就是说在python中Json序列化的数据放到Java同样可用,序列化的意思就是能按字典、列表等python数据的格式转换成字符串存储在内存中(内存只能按字节或者二进制形式的存储)。Json只能序列化简单的数据,例如:列表、字典、集合等数据格式,函数就不能进行序列化。

序列化举例说明:

import json#json只能处理简单的数据,例如列表、字典、集合之类的,它是一种夸语言之间的交互式info={    'name':'Jorocco',    'age':23,    }f=open("test.txt","w")#文件只能存字符串,把对象转成字符串就是序列化f.write(json.dumps(info))#通过此方法将数据进行序列化json.dump(info,f)#与上面的方法完全等同#f.write(str(info))#要是不通过Json方法,就只能通过此方法f.close()

有序列化,就有反序列化,反序列化就是将字符串转成python特定的格式。

反序列化举例说明:

import jsonf=open("test.txt","r")data=json.loads(f.read())#反序列方法data=json.load(f)#完全等同于上面的反序列化print(data)

pickle
pickle,用于python所有的类型 和 python的数据类型间进行转换,相比Json,它能转换比如函数类型。

pickle序列化举例说明

import pickledef sayhi(name):     print("hello,",name)     print("hello2")info={    'name':'Jorocco',    'age':23,    'func':sayhi#pickle可以序列化python所有的数据类型,只需要将函数的地址传递进来,但是反序列化的时候则会报错,因为该地址随着此程序的运行结束就被回收了    }f=open("test.txt","wb")#pickle存储的是二进制文件,所以写入的时候为'wb'f.write(pickle.dumps(info))#通过此方法将数据进行序列化#pickle.dump(info,f)  #等同于f.write(pickle.dumps(info))f.close()

pickle反序列化举例说明

import pickledef sayhi(name):     print("hello,",name)f=open("test.txt",'rb')data=pickle.loads(f.read())#如果就这样的话,会报错,因为序列化了一个函数,它的地址随着序列化程序的运行结束就被回收了pickle.load(f)#和上面的效果一样#但是当我们加了上面的那个和序列化函数的名称一样的函数时,就可以反序列化了,即使功能不同print(data['func']("Jorocco"))

注意:在python3中可以序列化多次,但只能反序列化一次,因此,序列化了多次,反序列化的时候就会出错,所以我们都只序列化一个文件,反序列化一个文件,如果实在要进行序列化多次,那就序列化成多个文件。

原创粉丝点击