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'))
<br/>html
参考资料:python
Python 全栈json