python基础——Json和Pickle

xiaoxiao2021-02-28  96

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 json f=open("test.txt","r") data=json.loads(f.read())#反序列方法 data=json.load(f)#完全等同于上面的反序列化 print(data)

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

pickle序列化举例说明

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

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

转载请注明原文地址: https://www.6miu.com/read-79802.html

最新回复(0)