Может ли база данных GDBM, созданная в C, быть открыта в Python?
У меня есть программа на Python, в которой я пытаюсь использовать этот рифмованный словарь для поиска рифм.
Часть установки библиотеки словарей работает программой на C, создающей три gdbm .db
файлы. Код, который делает это, является общедоступным здесь (из раздела "получить исходный код"), а также ключевой частью сборщика C gdbm. compile.c
выглядит так:
#include <gdbm.h>
...<snip>...
int main(int argc, char *argv[]) {
FILE *input;
GDBM_FILE output;
...<snip>...
output = gdbm_open(argv[2], 0, GDBM_NEWDB, 0644, 0);
...<snip>...
gdbm_sync(output);
...<snip>...
words.db
создан, и к нему можно успешно получить доступ из встроенного интерфейса командной строки.
Согласно странице примера библиотеки, я должен иметь возможность использовать модуль python gdbm для доступа к базе данных.
Однако я не могу. Когда я запускаю следующее:
import gdbm
words = gdbm.open('/usr/share/rhyme/words.db')
Я получаю следующую ошибку:
words = gdbm.open('/usr/share/rhyme/words.db')
gdbm.error: Bad magic number
Есть ли проблема несовместимости файлов? Некоторые файлы GDBM, созданные в C, не открываются с помощью Python?
(Это с Python 2.7 на OSX 10.6.8. GDBM Python был установлен через MacPorts)
2 ответа
Как вы создали файл words.db? Похоже, что words.db поврежден или в формате, который не поддерживается вашей конкретной версией библиотеки gdbm в Mac OS X.
Цитирую создателя Python (все становимся на колени и повторяем, мы не достойны! X3:-)
Все просто - gdbm чувствителен к порядку байтов. Увы, я не знаю, что с этим делать, кроме как преобразовать его в более переносимый формат для передачи или исправить источник gdbm:-(
- Гвидо ван Россум (домашняя страница: http://www.python.org/~guido/)