When working with objects in Python, it often becomes necessary to save their state so that they can be used later or shared across different applications. This process is commonly referred to as data persistence.
The Python standard library provides a powerful tool for persisting objects called the pickle module. It allows you to serialize objects, effectively converting them into a byte stream that can be written to a file or transmitted over a network. Here's an example demonstrating its usage:
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
You can also define a simple utility function to handle the serialization process:
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 (or _pickle) vs. pickle:
For faster performance, consider using the cPickle module, which is a C implementation of the pickle module. The difference in performance is marginal, but the C version is noticeably faster. In Python 3, cPickle was renamed to _pickle.
Data Stream Formats (Protocols):
pickle supports multiple data stream formats known as protocols. The highest protocol available depends on the Python version being used, and in Python 3.8.1, Protocol version 4 is used by default.
Multiple Objects:
A pickle file can contain multiple pickled objects. To store several objects, they can be placed in a container like a list, tuple, or dict and then serialized into a single file.
Custom Loaders:
If you don't know how many objects are stored in a pickle file, you can use a custom loader function like the one shown below to iterate through and load them all:
def pickle_loader(filename): with open(filename, "rb") as f: while True: try: yield pickle.load(f) except EOFError: break
The above is the detailed content of How to Effectively Persist Objects in Python Using the Pickle Module?. For more information, please follow other related articles on the PHP Chinese website!