python--序列化(dump和dumps的区别、load和loads的区别、json与pickle模块的区别)

序列化
序列化:pickle模块 json模块 shelve模块
一.pickle模块
1.pickle模块
1)可以将对象转换为一种可以传输或存储的格式。
2)pickle模块将任意一个python对象换成一个系统字节的操作过程叫做串行化对象。
3)pickle模块实现了python的所有数据序列化和反序列化。它不是用于多种语言间的传输,它仅作为python对象的持久化或者python程序间进行互相传输对象的。

#将数据序列化后存储到文件中
import pickle
f = open('test.txt','wb')     #pickle只能以二进制格式存储数据到文件
data = {'k1':'python','k2':'java'}
f.write(pickle.dumps(data))     #dumps序列化源数据后写入文件
f.close()



#反序列化读取源数据
import  pickle
f = open('test.txt','rb')
da = pickle.loads(f.read())     #使用loads反序列化
print(da)

2.dump和dumps的区别:
dump是将对象序列化并保存到文件中
dumps是将对象序列化

3.load和loads的区别:
load将序列化字符串从文件读取并反序列化
loads将序列化字符串反序列化
执行代码:
python--序列化(dump和dumps的区别、load和loads的区别、json与pickle模块的区别)
运行结果:
python--序列化(dump和dumps的区别、load和loads的区别、json与pickle模块的区别)

二.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数据格式,它会在目录下生成三个文件。
执行代码:
python--序列化(dump和dumps的区别、load和loads的区别、json与pickle模块的区别)
运行结果:
python--序列化(dump和dumps的区别、load和loads的区别、json与pickle模块的区别)