在 Python 中使用对象时,通常需要保存它们的状态以便以后使用或在不同的应用程序之间共享。这个过程通常称为数据持久化。
Python 标准库提供了一个强大的工具来持久化对象,称为 pickle 模块。它允许您序列化对象,有效地将它们转换为可以写入文件或通过网络传输的字节流。以下是演示其用法的示例:
import pickle # Create a Company object company1 = Company('banana', 40) # Open a file for writing with open('company_data.pkl', 'wb') as outp: # Serialize the object and store it in the file pickle.dump(company1, outp, pickle.HIGHEST_PROTOCOL) # Open a file for reading with open('company_data.pkl', 'rb') as inp: # Deserialize the object and load it into memory company1 = pickle.load(inp) # Retrieve and print the object's attributes print(company1.name) # 'banana' print(company1.value) # 40
您还可以定义一个简单的实用函数来处理序列化过程:
def save_object(obj, filename): with open(filename, 'wb') as outp: pickle.dump(obj, outp, pickle.HIGHEST_PROTOCOL) # Usage save_object(company1, 'company1.pkl')
cPickle(或 _pickle)与pickle:
为了获得更快的性能,请考虑使用 cPickle 模块,它是 pickle 模块的 C 实现。性能差异很小,但 C 版本明显更快。在Python 3中,cPickle被重命名为_pickle。
数据流格式(协议):
pickle支持多种称为协议的数据流格式。可用的最高协议取决于所使用的 Python 版本,在 Python 3.8.1 中,默认使用协议版本 4。
多个对象:
a pickle文件可以包含多个 pickled 对象。要存储多个对象,可以将它们放置在列表、元组或字典等容器中,然后序列化为单个文件。
自定义加载器:
如果您不知道一个 pickle 文件中存储了多少个对象,您可以使用如下所示的自定义加载器函数来迭代并加载它们全部:
def pickle_loader(filename): with open(filename, "rb") as f: while True: try: yield pickle.load(f) except EOFError: break
以上是如何使用 Pickle 模块在 Python 中有效地持久化对象?的详细内容。更多信息请关注PHP中文网其他相关文章!