1. 序列化定义
- 把对象(变量)从内存中变成可存储或传输的过程称之为序列化, 在Python中叫pickling,其他语言中称之为serialization等;
- 序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上;
- 把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling;
# 示例一:将字典写入到文件中
dic = str({'1':'111'})
f = open('test', 'w')
f.write(dic) # 写入失败:write() argument must be str, not set
# 示例二: 读入文件中的字典
f.open('test', 'r')
data = f.read()
print(eval(data)['1']) # 此处,需要将data使用 eval()函数进行转换
2. JSON
# 示例一: 序列化
import json
dic = {'name': '小虎', 'age': '19'}
data = json.dumps(dic)
f = open('JSON_text', 'w')
f.write(data)
f.close()
# 使用 dump
f = open('JSON_text', 'w')
json.dump(dic, f)
f.close()
# 示例二: 反序列化
import json
f = open('JSON_text', 'r')
data = f.read()
data = json.loads(data)
print(data['name'])
# 使用 load
f = open('JSON_text', 'r')
data = json.load(f)
print(data['name'])
3. pickle
- pickle 模块基本上功能使用和JSON模块没有太大区别;
- pickle 不是用于多种语言间的数据传输,它仅作为python对象的持久化或python程序间进行互相传输对象的方法;
# 示例一: 序列化
import pickle
def foo():
print('ok')
data = pickle.dumps(foo)
f = open('PICKLE_text', 'wb') # wb write byte
f.write(data)
f.close()
# 示例二: 反序列化
import pickle
def foo():
print('ok')
f = open('PICKLE_text', 'rb')
data = f.read()
data = pickle.loads(data)
data()
4. shelve 模块
- shelve模块比pickle模块简单,只有一个
open
函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是
Python所支持的数据类型。
# 示例:
# 序列化
import shelve
f = shelve.open(r'shelve.txt')
f['info'] = {'name':'lisi', 'age': '14'}
# 反序列化
f = shelve.open('shelve.txt')
print(f.get('info'))
参考资料: