| Details |
obj | 将obj的pickle表示形式存储到打开的文件对象file中 |
protocol | 一个整数,告诉pickler使用给定的协议,0-ASCII,1-旧二进制格式 |
file | file参数必须具有write()方法(对于dump方法为wb),以及对于加载的read()方法(rb) |
1: Python持久化
像数字、列表、字典、嵌套结构和类实例对象这样的对象存在于你的计算机内存中,并且一旦脚本结束就会丢失。
pickle将数据持久地存储在单独的文件中。
对象的pickle表示形式在所有情况下总是一个字节对象,因此必须以wb模式打开文件以存储数据,并以rb模式打开文件以从pickle加载数据。
数据可以是任何类型,例如:
data={'a':'some_value',
'b':[9,4,7],
'c':['some_str','another_str','spam','ham'],
'd':{'key':'nested_dictionary'},
}
存储数据
import pickle
file = open('filename', 'wb') # 以二进制写入模式打开文件对象
pickle.dump(data, file) # 将数据转储到文件对象中
file.close() # 关闭文件以写入数据
加载数据
import pickle
file = open('filename', 'rb') # 以二进制读取模式打开文件对象
data = pickle.load(file) # 从文件对象中加载数据
file.close()
>>> data
{'b': [9, 4, 7], 'a': 'some_value', 'd': {'key': 'nested_dictionary'},
'c': ['some_str', 'another_str', 'spam', 'ham']}
以下类型可以被pickle:
- None、True和False
- 整数、浮点数、复数
- 字符串、字节、字节数组
- 只包含可pickle对象的元组、列表、集合和字典
- 在模块顶层定义的函数(使用def,而不是lambda)
- 在模块顶层定义的内置函数
- 在模块顶层定义的类
- 其dict或__getstate__()结果为可pickle对象的此类实例
2: 保存和加载的函数工具
将数据保存到文件并从文件加载
import pickle
def save(filename,object):
file=open(filename,'wb')
pickle.dump(object,file)
file.close()
def load(filename):
file=open(filename,'rb')
object=pickle.load(file)
file.close()
return object
>>>list_object=[1,1,2,3,5,8,'a','e','i','o','u']
>>>save('list_file',list_object)
>>>new_list=load('list_file')
>>>new_list
[1, 1, 2, 3, 5, 8, 'a', 'e', 'i', 'o', 'u']
- save函数将对象保存到指定的文件中。
- load函数从指定的文件中加载对象。
- 使用pickle时,文件必须以二进制模式打开(wb用于写入,rb用于读取)。
- pickle可以处理多种数据类型,但某些对象(如文件句柄、数据库连接等)不能被pickle。