gdbm.md
1> **Источник:** https://python-all.ru/2.7/library/gdbm.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 11.9. [`gdbm`](https://python-all.ru/2.7/library/gdbm.html#module-gdbm) – GNU-реализация dbm89> **Примечание**10>11> Модуль [`gdbm`](https://python-all.ru/2.7/library/gdbm.html#module-gdbm) был переименован в `dbm.gnu` в Python 3. Инструмент [2to3](https://python-all.ru/2.7/glossary.html#term-2to3) автоматически адаптирует импорты при преобразовании исходных кодов в Python 3.1213Этот модуль во многом похож на модуль [`dbm`](https://python-all.ru/2.7/library/dbm.html#module-dbm), но использует `gdbm` для предоставления дополнительных возможностей. Обратите внимание, что форматы файлов, созданные с помощью `gdbm` и `dbm`, несовместимы.1415Модуль [`gdbm`](https://python-all.ru/2.7/library/gdbm.html#module-gdbm) предоставляет интерфейс к библиотеке GNU DBM. Объекты `gdbm` ведут себя как отображения (словари), за исключением того, что ключи и значения всегда являются строками. При печати объекта `gdbm` ключи и значения не выводятся, а методы `items()` и `values()` не поддерживаются.1617Модуль определяет следующие константу и функции:1819#### `exception gdbm.error`2021Возбуждается при ошибках, специфичных для `gdbm`, таких как ошибки ввода-вывода. [`KeyError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.KeyError) возбуждается для общих ошибок отображения, например, при указании неверного ключа.2223#### `gdbm.open(filename[, flag[, mode]])`2425Открывает базу данных `gdbm` и возвращает объект `gdbm`. Аргумент *filename* – это имя файла базы данных.2627Необязательный аргумент *flag* может быть:2829| Значение | Значение |30| --- | --- |31| `'r'` | Открыть существующую базу данных только для чтения (по умолчанию) |32| `'w'` | Открыть существующую базу данных для чтения и записи |33| `'c'` | Открыть базу данных для чтения и записи, создав её, если она не существует |34| `'n'` | Всегда создавать новую пустую базу данных, открытую для чтения и записи |3536Следующие дополнительные символы могут быть добавлены к флагу для управления тем, как открывается база данных:3738| Значение | Значение |39| --- | --- |40| `'f'` | Открыть базу данных в быстром режиме. Записи в базу данных не будут синхронизироваться. |41| `'s'` | Синхронизированный режим. Это приведёт к тому, что изменения в базу данных будут немедленно записаны в файл. |42| `'u'` | Не блокировать базу данных. |4344Не все флаги допустимы для всех версий `gdbm`. Константа модуля `open_flags` – это строка поддерживаемых символов флагов. Исключение [`error`](https://python-all.ru/2.7/library/gdbm.html#gdbm.error) возникает, если указан недопустимый флаг.4546Необязательный аргумент *mode* – это Unix-режим файла, используемый только при создании базы данных. По умолчанию он равен восьмеричному `0666`.4748В дополнение к методам, подобным словарным, объекты `gdbm` имеют следующие методы:4950#### `gdbm.firstkey()`5152С помощью этого метода и метода [`nextkey()`](https://python-all.ru/2.7/library/gdbm.html#gdbm.nextkey) можно перебрать все ключи в базе данных. Обход упорядочен по внутренним хеш-значениям `gdbm` и не будет отсортирован по значениям ключей. Этот метод возвращает начальный ключ.5354#### `gdbm.nextkey(key)`5556Возвращает ключ, следующий за *key* при обходе. Следующий код выводит все ключи базы данных `db`, не создавая в памяти список, содержащий их все:5758```python59k = db.firstkey()60while k != None:61 print k62 k = db.nextkey(k)63```6465#### `gdbm.reorganize()`6667Если было выполнено много удалений и требуется уменьшить пространство, занимаемое файлом `gdbm`, эта процедура переорганизует базу данных. `gdbm` не будет сокращать длину файла базы данных, кроме как с помощью этой переорганизации; в противном случае пространство удаленного файла будет сохраняться и повторно использоваться по мере добавления новых пар (ключ, значение).6869#### `gdbm.sync()`7071Когда база данных открыта в быстром режиме, этот метод принудительно записывает на диск все незаписанные данные.7273#### `gdbm.close()`7475Закрыть базу данных `gdbm`.7677> **См. также**78>79> **Модуль [`anydbm`](https://python-all.ru/2.7/library/anydbm.html#module-anydbm)**80>81> Общий интерфейс для баз данных стиля `dbm`.82>83> **Модуль [`whichdb`](https://python-all.ru/2.7/library/whichdb.html#module-whichdb)**84>85> Вспомогательный модуль для определения типа существующей базы данных.86