序列化: 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 可以将字符串从文件中读取出来, 再反序列化
二. JSON
1. 主要参数:
1)obj: 将 obj 对象格式化并存储到文件对象中, 文件必须为可写的文件句柄, JSON 只产生 str 对象,
不支持 bytes 对象.
2)skipkey: 如果为 True, 对象的基本类型必须是 str,int,float,bool,Non
3)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 shelve
- s = 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
来源: http://www.bubuko.com/infodetail-3108687.html