10.4. Pickle Objects

10.4.1. Serialize and Deserialize Datetimes

>>> from datetime import datetime
>>> import pickle
>>>
>>>
>>> dt = datetime(1969, 7, 21, 2, 56, 15)
>>> pickle.dumps(dt)
b'\x80\x04\x95*\x00\x00\x00\x00\x00\x00\x00\x8c\x08datetime\x94\x8c\x08datetime\x94\x93\x94C\n\x07\xb1\x07\x15\x028\x0f\x00\x00\x00\x94\x85\x94R\x94.'
>>> import pickle
>>>
>>>
>>> pickle.loads(b'\x80\x04\x95*\x00\x00\x00\x00\x00\x00\x00\x8c\x08datetime\x94\x8c\x08datetime\x94\x93\x94C\n\x07\xb1\x07\x15\x028\x0f\x00\x00\x00\x94\x85\x94R\x94.')
datetime.datetime(1969, 7, 21, 2, 56, 15)

10.4.2. Serialize and Deserialize Objects

>>> import pickle
>>>
>>>
>>> class Astronaut:
...     def __init__(self, firstname, lastname):
...         self.firstname = firstname
...         self.lastname = lastname
>>>
>>>
>>> mark = Astronaut('Mark', 'Watney')
>>> result = pickle.dumps(vars(mark))
>>>
>>> result
b'\x80\x04\x95,\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\tfirstname\x94\x8c\x04Mark\x94\x8c\x08lastname\x94\x8c\x06Watney\x94u.'
>>>
>>> data = pickle.loads(result)
>>> Astronaut(**data)  
<__main__.Astronaut object at 0x...>

10.4.3. Examples

Advanced Example:

>>> from datetime import date, datetime
>>> import pickle
>>>
>>>
>>> DATA = {'mission': 'Ares 3',
...         'launch_date': datetime(2035, 6, 29),
...         'destination': 'Mars',
...         'destination_landing': datetime(2035, 11, 7),
...         'destination_location': 'Acidalia Planitia',
...         'crew': [{'name': 'Melissa Lewis', 'birthdate': date(1995, 7, 15)},
...                  {'name': 'Rick Martinez', 'birthdate': date(1996, 1, 21)},
...                  {'name': 'Alex Vogel', 'birthdate': date(1994, 11, 15)},
...                  {'name': 'Chris Beck', 'birthdate': date(1999, 8, 2)},
...                  {'name': 'Beth Johanssen', 'birthdate': date(2006, 5, 9)},
...                  {'name': 'Mark Watney', 'birthdate': date(1994, 10, 12)}]}
>>>
>>>
>>> result = pickle.dumps(DATA)
>>> print(result)
b'\x80\x04\x95\xb2\x01\x00\x00\x00\x00\x00\x00}\x94(\x8c\x07mission\x94\x8c\x06Ares 3\x94\x8c\x0blaunch_date\x94\x8c\x08datetime\x94\x8c\x08datetime\x94\x93\x94C\n\x07\xf3\x06\x1d\x00\x00\x00\x00\x00\x00\x94\x85\x94R\x94\x8c\x0bdestination\x94\x8c\x04Mars\x94\x8c\x13destination_landing\x94h\x06C\n\x07\xf3\x0b\x07\x00\x00\x00\x00\x00\x00\x94\x85\x94R\x94\x8c\x14destination_location\x94\x8c\x11Acidalia Planitia\x94\x8c\x04crew\x94]\x94(}\x94(\x8c\x04name\x94\x8c\rMelissa Lewis\x94\x8c\tbirthdate\x94h\x04\x8c\x04date\x94\x93\x94C\x04\x07\xcb\x07\x0f\x94\x85\x94R\x94u}\x94(h\x15\x8c\rRick Martinez\x94h\x17h\x19C\x04\x07\xcc\x01\x15\x94\x85\x94R\x94u}\x94(h\x15\x8c\nAlex Vogel\x94h\x17h\x19C\x04\x07\xca\x0b\x0f\x94\x85\x94R\x94u}\x94(h\x15\x8c\nChris Beck\x94h\x17h\x19C\x04\x07\xcf\x08\x02\x94\x85\x94R\x94u}\x94(h\x15\x8c\x0eBeth Johanssen\x94h\x17h\x19C\x04\x07\xd6\x05\t\x94\x85\x94R\x94u}\x94(h\x15\x8c\x0bMark Watney\x94h\x17h\x19C\x04\x07\xca\n\x0c\x94\x85\x94R\x94ueu.'
>>>
>>> result = pickle.loads(result)
>>>
>>> print(result)  
{'mission': 'Ares 3',
 'launch_date': datetime.datetime(2035, 6, 29, 0, 0),
 'destination': 'Mars',
 'destination_landing': datetime.datetime(2035, 11, 7, 0, 0),
 'destination_location': 'Acidalia Planitia',
 'crew': [{'name': 'Melissa Lewis', 'birthdate': datetime.date(1995, 7, 15)},
          {'name': 'Rick Martinez', 'birthdate': datetime.date(1996, 1, 21)},
          {'name': 'Alex Vogel', 'birthdate': datetime.date(1994, 11, 15)},
          {'name': 'Chris Beck', 'birthdate': datetime.date(1999, 8, 2)},
          {'name': 'Beth Johanssen', 'birthdate': datetime.date(2006, 5, 9)},
          {'name': 'Mark Watney', 'birthdate': datetime.date(1994, 10, 12)}]}