2009-03-29 6 views
0

Я использую программу флеш-карты Mnemosyne, которая использует скрипт python. Недавно моя база данных флеш-карт стала недоступной после того, как мой компьютер застыл, и мне пришлось закрыть его вручную. Всякий раз, когда я пытаюсь загрузить базу данных, содержащую мои карты, я получаю эту ошибку.Bad Pickle get error

 
Invalid file format 
Traceback(innermost last): 
File "mnemosyne\core\mnemosyne_core.pyc", line 1012, in load_database 
BadPickleGet: 577" 

Справка была бы принята с благодарностью.

+0

Проводка источника поможет –

+0

источник может быть недоступен. Похоже, что это сторонняя программа, а трассировка - .pyc. Если у вас есть файл mnemosyne \ core \ mnemosyne_core.py, попробуйте опубликовать некоторые из них здесь. –

+0

У меня есть основной файл, но он довольно большой, и я не уверен, как прикрепить файл к этому форуму, есть ли какая-то конкретная часть файла, которую вы предлагаете разместить? –

ответ

1

(Хотя копия Клейтон может быть дистрибутивом, источник для Мнемозина находится в свободном доступе.)

Это не большая помощь, хотя: линия 1012 просто:

db = cPickle.load(infile) 

Где входной_файл 'является сохраненный файл базы данных. Так что в вашем файле базы данных есть что-то поврежденное. (BadPickleGet - это особый подкласс UnpicklingError, который вы ожидаете, когда входной файл поврежден.)

Возможно, вы можете изменить mnemosyne_core.py, чтобы использовать простой модуль рассола Python вместо cPickle, что позволяет добавлять отладку в pickle .py и точно определить, что именно в файле, который ему не нравится. Но, если честно, если файл стал коррумпированным из-за аппаратного сбоя/жесткой власти, вероятность того, что содержимое будет усечено, нечитабельно или просто полное мусор.

Подготовка к идти через те ранние карты снова ...

+0

Хорошо, спасибо за помощь, хотя, есть ли лучший способ извлечения карт вручную? Сценарий может быть немного трудным для прохождения, и я хотел бы извлечь 800 карт, в частности принадлежащих к одной категории, поэтому любой способ просеивания через скрипт python был бы очень полезен. –

+0

Вы можете попробовать изучить данные с помощью pickletools.dis(). Если у вас есть усеченные данные, это, по крайней мере, покажет вам, сколько у вас есть. Я подозреваю, что вы, возможно, проиграли. – bobince