简介
我们把变量从内存中变成可存储或传输的过程称之为序列化,在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()