Python 中的josn和pickle模块(序列化模块)
其他
2020-04-03 16:25:33
阅读次数: 0
Python 中的json和pickle模块(序列化模块)
(1) 什么是序列化
- 这里的序列化特指字符串或者bytes
- 序列: 列表,元组,字符串,bytes
- 序列化就是把其他数据类型转换成序列的字符串或者bytes
- 序列化是为了网络数据传输(bytes)和存储(字符串,本质也是bytes)
- eval要慎用,尤其是用户输入,网上接受的数据,文件中的内容
- eval执行的字符串代码常是一些已知的代码
(2) json模块中的函数
- json.dumps(数据类型,ensure_ascii=True(默认)), 将传入的数据类型转成字符串形式(序列化),在内存中转换.用于网络传输
- json.dumps()中的参数ensure_ascii是否显示编码,sort_keys,是否排序,separators=(),根据什么字符格式化
- json.loads(字符串类型数据), 将传入的字符串数据类型转成对应数据类型(反序列化),在内存中转换.用于网络传输
- json.dump(数据类型,打开的文件),直接将数据类型序列化成字符串,然后存到文件中,用于操作文件
- json.load(字符串类型数据,打开的文件),直接从文件中将字符串数据类型反序列化成数据类型,用于操作文件
(3) json模块中的问题
- json模块处理的数据类型非常有限:字符串,列表,字典数字
- json中字典数据类型的key只能是字符串
- json的好处就是在所有语言之间都通用
- json模块中的字典类型数据中,如果用数字做键,则反序列化的结果会变成字符串
- json模块中的字典类型数据中,如果元组做键会报错,如果做值会转换成列表类型
- json模块中的元组数据类型,在反序列化后会转换成列表
- json模块不支持集合类型
- json.load()操作的文件中不能有多个数据类型,否则会报错
(4) pickle模块中的函数
- pickle.dumps(),在内存中转换.转换成bytes,序列化
- pickle.loads(),在内存中转换.转换成数据类型,反序列化
- pickle.dump(数据类型,打开的文件), 在文件中操作,这里必须以wb形式打开
- pickle.load(字符串类型数据,打开的文件),在文件中操作,这里必须以rb形式打开
(5) pickle模块中的问题
- pickle的dumps和dump结果只能是bytes类型,因此不能看到结果
- 只能在python中使用
- 支持在Python中所有的数据类型
- 可以多次dump和load,文件中可以有多个数据类型,每次load返回一个数据类型
发布了66 篇原创文章 ·
获赞 7 ·
访问量 2375
转载自blog.csdn.net/qq_45894553/article/details/104908065