2013-04-14 4 views
2

У меня есть программа Python, в которой я пытаюсь использовать this rhyming dictionary для поиска рифм.Может ли база данных GDBM, созданная в C, открываться в Python?

Часть программы для библиотеки словарей работает программой C, создающей три файла gdbm .db. Код, который делает это публично доступны here (от «получить источник» раздела), а ключевая часть 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 создан, и его можно успешно получить доступ из связанного интерфейса командной строки.

Согласно the library's example page, я должен использовать модуль 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)

+0

отлично работает для меня: г [ "AY1-М"] = «антикриминальном байм CHIME CLIMB CLIME ПРЕСТУПНОСТИ DIME GRIME HAIM HEIM HIME I'M KIME LIME LYME MIME одноразовая PART-TIME PRIME RHYME RIME SEIM SIME SLIME SUBLIME SYME THYME TIME " Я скомпилировал базу данных, используя стандартную" libgdbm-dev "на Ubuntu (Precise) и прочитать его с помощью Python 2.7.3. –

+0

Хорошо спасибо, это заставляет меня думать, что это проблема, специфичная для OSX. Вероятно, с тем, чтобы использовать GDBM, который я установил через MacPorts и GDBM ОС. –

+0

Эй, Билл. Вы могли удалить библиотеку? Вы могли сравнить заголовки gdbm? –

ответ

1

Как создать файл words.db? Похоже, что words.db поврежден или в формате, который не поддерживается конкретной версией библиотеки GDBM на Mac OS X.

+0

Файлы gdbm создаются программой C на моей платформе; Я дал фрагменты кода, используемого в моем вопросе, и весь исходный файл этой C-программы также связан в вопросе. Таким образом, проблема заключается в том, что файлы gdbm, созданные C на моей платформе, не могут быть прочитаны Python на моей платформе. –

+0

В качестве быстрого теста напишите программу python для создания пустой базы данных gdbm. Сравните заголовки обоих файлов .db - тот, который создан вашей программой на языке C, и созданный Python. Проверьте, совпадают ли первые 2 или 4 байта? Возможно, вы установили две разные библиотеки libgdbm? –

+0

Я думаю, что я установил две разные библиотеки - C из источника и Python через MacPorts. Я сделаю, как вы предложили, и объедините заголовки. –

1

Цитирование создателя Python (все на колени и повторить мы не достойны! x3 :-)

Simple -- gdbm is sensitive to the byte order. Alas, I don't know what to do about it except converting it to a more portable format for transfer, or patching the gdbm source :-(

--Guido van Rossum (home page: http://www.python.org/~guido/)