Сохранение объектов в файл - Модуль pickle Python
Сохранить объекты в файл и в дальнейшем восстановить объекты из файла позволяют модули pickle и shelve. Модуль pickle предоставляет следующие функции:
dump(<Объект>, <Файл>[, <Протокол>]) - производит сериализацию объекта и записывает данные в указанный файл. В параметре <Файл> указывается файловый объект, открытый для записи. Ниже продемонстрирован способ сохранения объекта в файл.
>>> import pickle
>>> f = open(r'file.txt', 'wb')
>>> obj = ["Строка", (2, 3)]
>>> pickle.dump(obj, f)
>>> f.close()
load(<Файл>) - читает сохраненные данные из файла и преобразует их в объект. В параметре <Файл> указывается файловой объект, открытый для чтения. Пример восстановления объекта из файла.
>>> f = open(r'file.txt', 'rb')
>>> obj = pickle.load(f)
>>> obj
['\xd0\xa1\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0', (2, 3)]
>>> f.close()
Любой бизнес необходимо развивать, а для развития все средства хороши. Рекламная полиграфия от http://konus-u.com.ua/ поможет сделать вашу фирму узнаваемой. Чтобы быть у ваших клиентов каждый день под рукой можно напечатать фирменные блокноты которые будут на виду каждый день как напоминание о вашей продукции.
В один файл можно сохранить сразу несколько объектов, последовательно вызывая функцию dump(). Пример сохранения нескольких объектов приведен в листинге ниже.
>>> obj1 = ["Строка", (2, 3)]
>>> obj2 = (5, 6)
>>> 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
(['\xd0\xa1\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0', (2, 3)], (5, 6))
>>> f.close()
Модуль pickle позволяет также преобразовать объект в строку и восстановить объект из строки. Для этого предназначены следующие функции:
dumps(<Объект>, [, <Протокол>]) - производит сериализацию объекта и возвращает строку специального формата. Формат этой строки зависит от указанного протокола (число от 0 до 2). В качестве примера выведем результат преобразования в различных протоколах.
>>> obj = ["Строка", (2, 3)]
>>> pickle.dumps(obj)
"(lp0\nS'\\xd0\\xa1\\xd1\\x82\\xd1\\x80\\xd0\\xbe\\xd0\\xba\\xd0\\xb0'\np1\na(I2\nI3\ntp2\na."
>>> pickle.dumps(obj, 0) # Протокол 0
"(lp0\nS'\\xd0\\xa1\\xd1\\x82\\xd1\\x80\\xd0\\xbe\\xd0\\xba\\xd0\\xb0'\np1\na(I2\nI3\ntp2\na."
>>> pickle.dumps(obj, 1) # Протокол 0
']q\x00(U\x0c\xd0\xa1\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0q\x01(K\x02K\x03tq\x02e.'
>>> pickle.dumps(obj, 2) # Протокол 2
'\x80\x02]q\x00(U\x0c\xd0\xa1\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0q\x01K\x02K\x03\x86q\x02e.'
Во втором коментарии вместо # Протокол 0 надо # Протокол 1