Python 序列化和反序列化

简介

我们把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。

序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。

反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。

pickle

pickle是python独有,只能序列化内部的数据类型,其他语音的数据类型不能兼容

dumps和loads
  • pickle.dumps() 方法把任意对象序列化成一个bytes
  • pickle.loads() 方法把bytes数据转为对象
# 序列化
simple_dict = {'name': 'Jake', 'age': 22}
str = pickle.dumps(simple_dict)
print(str)

# 反序列化
bytes = b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00Jakeq\x02X\x03\x00\x00\x00ageq\x03K\x16u.'
data = pickle.loads(bytes)
print(data)  # {'name': 'Jake', 'age': 22}
dump和load
  • 序列化对象,将对象保存到文件中去
  • 简化dumps和loads对文件存储操作
# 序列化
simple_dict = {'name': 'Tom', 'age': 20}
f = open('text.txt', 'wb+')
pickle.dump(simple_dict, f, 0)
f.close()


# 反序列化
f = open('text.txt', 'rb+')
simple_dict = pickle.load(f)
print(simple_dict)  # {'name': 'Tom', 'age': 20}
f.close()

json

  • JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,JSON和Python内置的数据类型对应如下:

    JSON类型 Python类型
    {} dict
    [] list
    “字符串” str
    100 int
    0.1 float
    true/false True/False
    null None
dumps和loads
import json

# 序列化
simple_dict = {'name': 'Tom', 'age': 22}
json_str = json.dumps(simple_dict)
print('python数据', simple_dict)  # python数据 {'name': 'Tom', 'age': 22}
print('JSON字符串', json_str)  # JSON字符串 {"name": "Tom", "age": 22}

# 反序列化
data = json.loads(json_str)
print('python数据', data)  # python数据 {'name': 'Tom', 'age': 22}
dump和load

可以使用 json.dump() 和 json.load() 来编码和解码JSON数据,处理文件

import json

# 将json字符串保存到文件中
simple_dict = {'name': 'Jim', 'age': 33}
f = open('text.txt', 'w')
json.dump(simple_dict, f)
f.close()

# 将文件中的json数据读取出来
f = open('text.txt', 'r')
data = json.load(f)
print(data)  # {'name': 'Jim', 'age': 33}
f.close()

猜你喜欢

转载自blog.csdn.net/qq_14876133/article/details/81124610