序列化
序列化:pickle模块 json模块 shelve模块一.pickle模块1.pickle模块1)可以将对象转换为一种可以传输或存储的格式。2)pickle模块将任意一个python对象换成一个系统字节的操作过程叫做串行化对象。3)pickle模块实现了python的所有数据序列化和反序列化。它不是用于多种语言间的传输,它仅作为python对象的持久化或者python程序间进行互相传输对象的。import pickle#序列化----将数据存储只文件中info = {“Name:”:“XiaoMing”,“Age:”:22}data_info = open(“a.pkl”,“wb”)pickle.dump(info,data_info)data_info.close()#反序化—将文件读取出来并反序列化data_out =open(‘a.pkl’,‘rb’)a=pickle.load(data_out)print(a)2.dump和dumps的区别:dump是将对象序列化并保存到文件中dumps是将对象序列化3.load和loads的区别:load将序列化字符串从文件读取并反序列化loads将序列化字符串反序列化执行代码:
data1 = [1,2,‘a’,3,‘b’]pi = pickle.dumps(data1)#dumps用来只是序列化对象print(pi)print(pickle.loads(pi))#loads也单单用来反序列化对象data2 = {‘Name’:‘Alex’,‘Age’:22,‘Sex’:‘Boy’}f = open(‘b.pkl’,‘wb’)pickle.dump(data2,f)#dump不单把对象序列化,且可以把序列化的对象写入文件f =open(‘b.pkl’,‘rb’)print(pickle.load(f))#load可以把对象从文件中读取出来,然后再反序列化执行的结果:b’\x80\x03]q\x00(K\x01K\x02X\x01\x00\x00\x00aq\x01K\x03X\x01\x00\x00\x00bq\x02e.’[1, 2, ‘a’, 3, ‘b’]下面使用with方法data3 = {‘k1’:123,‘k2’:456}with open(‘c.pkl’,‘wb’) as str_p: pickle.dump(data3,str_p)with open(‘c.pkl’,‘rb’) as str_r: a = pickle.load(str_r) print(a)#总结:dumps和dump,loads和load的区别# dumps 只是将对象序列化# dump 可以将对象序列化,并把序列化的对象保存到文件中# loads 也只是将序列化的字符串反序列化# load 可以将字符串从文件中读取出来,再反序列化二.json1.主要参数:1)obj:将obj对象格式化并存储到文件对象中,文件必须为可写的文件句柄,json只产生str对象,不支持bytes对象。2)skipkey:如果为True,对象的基本类型必须是str,int,float,bool,Non3)ensure_ascii = True:如果为true则所以传入的非ASCII字符都被转义,如果为False则字符将被原样输出。4)check_circular=True:如果为true容器类型的循环引用检查将被跳过5)indent=None:表述数组元素和对象将被按指定的值缩进,可以是整数或字符串’\t’6)sort_keys=False:如果为True字典的输出将按键排序2.json与pickle模块的区别:1)json只能处理基本数据类型。pickle能处理所有的Python的数据类型。2)json用于各种语言之间的字符转换。pickle用于python程序对象的持久化或者python程序对象的持久化或者python程序对象网络传输。三.shelve模块与pickle类似用来持久化数据的,不过shelve是以键值对的形式,将内存中的数据通过文件支持持久化,值支持任何pickle支持的python数据格式,它会在目录下生成三个文件。
执行代码:---------------------import shelves = shelve.open(‘test_s.db’)
s[‘k1’] = {‘int’:10,‘float’:8.8,‘string’:‘python’}
s.close()s = shelve.open(‘test_s.db’)
print(s[‘k1’])
print(s[‘k1’][‘float’])
s.close()执行结果{‘int’: 10, ‘float’: 8.8, ‘string’: ‘python’}8.8