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

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

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

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

>> Python Канал в Telegram

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

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

Модуль shelve в Python

Модуль shelve Python позволяет сохранять объекты под определенный ключом (задается в виде строки) и определяется интерфейс доступа, сходный со словарями. Для сериализации объекта используется возможности модуля pickle, а чтобы записать получившуюся строку по ключу в файл , применяется модуль anydbm. Все эти действия модуль shelve производит незаметно для нас. Чтобы открыть файл с базой объектов, используется функция open(). Функция имеет следующий формат:

open(<Путь к файлу>[, flag="c"[, protocol=None[, writeback=False]]])

В необязательном параметре flag можно указать один из режимов открытия файла:

  • r - Только для чтения
  • w - чтение и запись
  • c - чтение и запись (значение по умолчанию). Если файл не существует, он будет создан.
  • n - чтение и запись. Если файл не существует, он будет создан. Если файл существует, он будет перезаписан.

Функция open() возвращает объект, с помощью которого производится дальнейшая работа с базой данных. Этот объект имеет следующие методы:

close() - закрывает файл с базой данных. В качестве примера создадим файл и сохран6им в нем список кортежа.

>>> import shelve
>>> db = shelve.open("file2.txt")
>>> db['language'] = ['ru', 'rn', 'ua']
>>> db['colors'] = ['red', 'blue', 'green']
>>> db['language'], db['colors']
(['ru', 'rn', 'ua'], ['red', 'blue', 'green'])
>>> db.close()

  • keys() и values() - позволяют получить список всех ключей и значений соответственно. Можно также воспользоваться методами iterkeys() и itervalues(), которые возвращают не список ключей и значений, а итератор.
  • items() - возвращает список кортежей. Каждый кортеж содержит ключ и значение. Можно также воспользоваться методом iteritems(), который возвращает итератор.
  • has_key(<Ключ>) - проверяет существование указанного ключа. Если ключ найден, то возвращается значение True, в противном случае - False. Пример:
>>> db = shelve.open('base2.txt')
>>> db = shelve.open('file2.txt')
>>> db.keys(), db.values()
(['colors', 'language'], [['red', 'blue', 'green'], ['ru', 'rn', 'ua']])
>>> db.items()
[('colors', ['red', 'blue', 'green']), ('language', ['ru', 'rn', 'ua'])]
>>> db.has_key('language'), db.has_key('cars')
(True, False)
>>> db.close()

get(<Ключ>[, <Значение по умолчанию>]) - если ключ присутствует, то метод возвращает значение, соответствующее этому ключу. Если ключ отсутствует, то возвращается значение None или значение, указанное во втором параметре.

pop(<Ключ>[, <Значение по умолчанию>]) - удаляет элемент с указанным ключом и возвращает его значение. Если ключ отсутствует, то возвращается значение из второго параметра. Если ключ отсутствует и второй параметр не указан, то возбуждается исключение KeyError.

Помимо этих методов можно воспользоваться функцией len() для получения количества элементов и оператором del для удаления определенного элемента.

>>> db = shelve.open('file2.txt')
>>> len(db)
2
>>> del db['colors']
>>> db.close()

При стройке нового помещения или дополнение уже существующего объекта, чаще уже стал применяется газобетон. Качественный UDK газобетон предоставляется вам по весьма доступным ценам которые позволят вам сэкономить на ремонт. Газобетон имеет отличные качества прочности, фоно-изоляции и термо-изоляции. Прочность стен из газобетона получается благодаря форме газобетона который позволяет в прямом смысле дополнять форму друг друга.

Комментариев: 7
  1. При стройке нового помещения или дополнение уже существующего объекта, чаще уже стал применяется газобетон. Качественный UDK газобетон предоставляе ...........

    что за колхоз !!! НЕ СЕРЬЕЗНО

  2. Vladimir, это не колхоз, это рекламная пауза :)

  3. Максим | 2017-04-30 в 11:06:57

    у меня с этой стройкой в голове уже начали выстраиваться связи с полками и устройством модуля shelve 8()

  4. Александр | 2018-05-29 в 07:49:14

    нормальный газобетон

  5. Гаааазобееееетооооооооннн!!!111111!!одынодын

  6. Не Олег | 2021-12-16 в 14:24:05

    Воистину газобетон!

  7. Газобетон что за бред, я это читаю, оказывается это не входит в тему