Быстрый в изучении - мощный в программировании
>> Telegram ЧАТ для Python Программистов

Свободное общение и помощь советом и решением проблем с кодом! Заходите в наш TELEGRAM ЧАТ!

>> Python Форум Помощи!

Мы создали форум где отвечаем на все вопросы связанные с языком программирования Python. Ждем вас там!

>> Python Канал в Telegram

Обучающие статьи, видео и новости из мира Python. Подпишитесь на наш TELEGRAM КАНАЛ!

Сохранение объектов в файл - Модуль pickle Python

20 января 2014 г. Archy Просмотров: 25672 RSS 1 , ,

Модуль 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.'
Комментариев: 1
  1. Андрей | 2019-02-07 в 21:41:51

    Во втором коментарии вместо # Протокол 0 надо # Протокол 1

Оставьте комментарий!

Используйте нормальные имена.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

(обязательно)