您可以在标准库中使用pickle模块。
这里有一个基本的应用程序它的例子:
import pickle
class Company(object):
def __init__(self, name, value):
self.name = name
self.value = value
with open('company_data.pkl', 'wb') as output:
company1 = Company('banana', 40)
pickle.dump(company1, output, pickle.HIGHEST_PROTOCOL)
company2 = Company('spam', 42)
pickle.dump(company2, output, pickle.HIGHEST_PROTOCOL)
del company1
del company2
with open('company_data.pkl', 'rb') as input:
company1 = pickle.load(input)
print(company1.name) # -> banana
print(company1.value) # -> 40
company2 = pickle.load(input)
print(company2.name) # -> spam
print(company2.value) # -> 42
您还可以使用一个简单的实用程序,如下所示打开一个文件并向其中写入一个对象:
def save_object(obj, filename):
with open(filename, 'wb') as output:
pickle.dump(obj, output, pickle.HIGHEST_PROTOCOL)
# sample usage
save_object(company1, 'company1.pkl')
更新:
由于这是一个流行的答案,我想谈一些稍微高级的使用主题。
首先,几乎总是首选实际使用cPickle模块而不是pickle,因为前者是用C编写的,速度更快。它们之间有一些细微的差别,但在大多数情况下,它们是等效的,C版本将提供非常出色的性能。切换到它不容易,只需更改import语句为:
import cPickle as pickle
(注意:在Python 3中,cPickle被重命名为_pickle,但不再需要这样做,因为pickle模块现在自动执行 – 参见问题What difference between pickle and _pickle in python 3?)。
其次,不是在每次调用中都写pickle.HIGHEST_PROTOCOL(假设这是你想要的,你通常这样做),而是只使用文本-1。
所以,而不是写:
pickle.dump(obj, output, pickle.HIGHEST_PROTOCOL)
你可以写:
pickle.dump(obj, output, -1)
这是相当短一点。
一个更好的方法,你只有一个指定协议是创建一个Pickler对象,并使用它做多个pickle操作:
pickler = pickle.Pickler(output, -1)
pickler.dump(obj1)
pickler.dump(obj2)
etc...