不为成仙,只为在这红尘中等你回来。

您现在的位置是:网站首页>>Python

Python3 序列化模块

2020年7月7日 21:26 | 分类:Python | 标签: Python

序列

所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们。

  • 列表
  • 元祖
  • 字符串
  • bytes(字节)
  • 队列 (deque)

什么是序列化?

把一个数据类型转换成字符串、bytes类型的过程就是序列化。

为什么要把一个数据类型序列化?

  • 当你需要把一个数据类型存储到文件中
  • 当你需要把一个数据类型通过网络传输

JSON

  • 可以在所有的语言中通用
  • 能够处理的数据类型非常有限
    • 在网络操作或多语言环境中,要传递字典、数字、字符串、列表等简单数据类型的时候使用
  • Json 的字典有非常苛刻的要求:key 必须是字符串,且所有的字符串都必须用“”表示
  • dumps(dict/list)
    • dict/list --> str 序列化方法
  • loads(str)
    • str --> dict/list 反序列化方法
  • dump(dic/list, f)
    • dict/list --> 文件 序列化方法
  • load(f)
    • 文件 --> dict/list 反序列化方法 注:多次dump到文件中的数据load时会报错
  • 参数:ensure_ascii=False 希望序列化的中文能以中文的形式显示并写到文件中

pickle

  • dumps(obj)
  • loads(bytes_object)
  • dump(obj, file)
  • load(file)
  • 操作文件必须要以 mode="b" 打开
  • 在 load 的时候,如果这个要被 load 的内容所在的类不在内存中,会报错
  • pickle 支持多次 dump 和多次 load (需要异常处理)
import pickle

student = {"name": "姬玄嚣", "age": 28}

stu_str = pickle.dumps(student)

stu = pickle.loads(stu_str)


with open("pickle_file.txt", 'wb') as f:
    f.write(stu_str)

with open("pickle_file.txt", 'wb') as f:
    pickle.dump(student, f)

with open("pickle_file.txt", 'rb') as f:
    content = pickle.load(f)
    print(content)