Python 中的josn和pickle模块(序列化模块)

Python 中的json和pickle模块(序列化模块)

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

猜你喜欢

转载自blog.csdn.net/qq_45894553/article/details/104908065