На этом шаге мы рассмотрим функции и методы сохранения объектов в файл, предоставляемые этим модулем.
Сохранить объекты в файл и в дальнейшем восстановить объекты из файла позволяют модули pickle и shelve.
Модуль pickle предоставляет следующие функции:
>>> import pickle >>> f = open(r"file.txt", "wb") >>> obj = ["Строка", (2, 3)] >>> pickle.dump(obj , f) >>> f.close()
load (<Файл> [, fix_imports=True] [, encoding="ASCII"] [, errors="strict"])
Пример восстановления объекта из файла:
>>> f = open (r"file.txt", "rb") >>> obj = pickle.load (f) >>> obj ['Строка', (2, 3)] >>> f.close ()
В один файл можно сохранить сразу несколько объектов, последовательно вызывая функцию dump(). Пример сохранения нескольких объектов приведен ниже.
>>> obj1 = ["Строка", (2, 3)] >>> obj2 = (1, 2) >>> f = open(r"file.txt", "wb") >>> pickle.dump (obj1, f) # Сохраняем первый объект >>> pickle.dump (obj2, f) # Сохраняем второй объект >>> f.close ()
Для восстановления объектов необходимо несколько раз вызвать функцию load():
>>> f = open (r"file.txt", "rb") >>> obj1 = pickle.load(f) # Восстанавливаем первый объект >>> obj2 = pickle.load(f) # Восстанавливаем второй объект >>> obj1, obj2 (['Строка', (2, 3)], (1, 2)) >>> f.close ()
Сохранить объект в файл можно также с помощью метода dump(<Объект>) класса Pickler. Конструктор класса имеет следующий формат:
Pickler(<Файл>[, <Протокол>][, fix_imports=True])
Пример сохранения объекта в файл:
>>> f = open(r"file.txt", "wb") >>> obj = ["Строка", (2, 3)] >>> pkl = pickle.Pickler (f) >>> pkl.dump(obj) >>> f.close ()
Восстановить объект из файла позволяет метод load() из класса Unpickler. Формат конструктора класса:
Unpickler(<Файл>[, fix_imports=True][, encoding="ASCII"] [, errors="strict"])
Пример восстановления объекта из файла:
>>> f = open (r"file.txt", "rb") >>> obj = pickle.Unpickler(f).load() >>> obj ['Строка', (2, 3)] >>> f.close()
Модуль pickle позволяет также преобразовать объект в последовательность байтов и восстановить объект из таковой. Для этого предназначены две функции:
>>> obj1 = [1, 2, 3, 4, 5] # Список >>> obj2 = (6, 7, 8, 9, 10) # Кортеж >>> pickle.dumps (obj1) b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04K\x05e.' >>> pickle.dumps (obj2) b'\x80\x03(K\x06K\x07K\x08K\tK\ntq\x00.'
>>> pickle.loads(b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04K\x05e.') [1, 2, 3, 4, 5] >>> pickle.loads(b'\x80\x03(K\x06K\x07K\x08K\tK\ntq\x00.') (6, 7, 8, 9, 10)
В заключение этого шага дадим краткую характеристику использованных в перечисленных функциях параметров.
На следующем шаге мы рассмотрим как реализованы эти операции в модуле shelve.