Storing objects with the best-named module ever, pickle
I love pickle
. I love that Python has a module named pickle. I have never used pickle before, but I like that it's there. Let's take a look at what pickle does.
Per the docs, pickle
provides an algorithm for serializing and unserializing a Python object. When we pickle an object, we turn it into a stream of bytes that can be sent to another process or saved to a file to be reconstructed at a later time. You still have to define the class in the namespace of the process reading the pickle - a pickled object comes with object data but no way to tell the program about an object type that's not already in the process namespace. pickle
also comes with a faster cPickle
companion that's written in C to make it super fast.
We can kick things off like so:
import pickle
class Cucumber:
def __init__(self, height):
self.height = height
def grow(self):
self.height += 1
return "Current height is: ", str(self.height)
veggie = Cucumber(2)
veggie.grow()
print pickle.dumps(veggie)
veggie.grow()
print pickle.dumps(veggie)
Here, I have created a Cucumber
object type and given it a method grow()
, which will increment its height. Calling the pickle.dumps()
method on an instance of our Cucumber
yields a short string of ASCII characters as a representation of our object.
I can also save objects to files and reload them in perfect condition:
veggie_two = Cucumber(4)
file_save = open('pickled_veggies', 'w')
pickle.dump(veggie_two, file_save)
file_save.close()
file_read = open('pickled_veggies', 'r')
veggie_three = pickle.load(file_read)
print "Veggie Three Height: ", str(veggie_three.height)
pickle
's dump()
mechanism (not dumps()
with a 's') is used to save these ASCII object strings to a file, and load()
is used to read them back from that file. loads()
would read them from a string.
And that's what pickle
does, simply and well. It makes your objects into strings, light, compact and ready to be stored forever.