2013-05-10 4 views
-1

Например у меня есть два словаря
это то, что я пробовал:как распаковать файл в python?

def unpickle(filename): 
    open = open(filename, "rb") 
    Dic1 = cPickle.load(open) 
    Dic2 = cPickle.load(open) 
    open.close() 
    return Dic1,Dict2 

Но это дает ошибку, когда я хочу unpickle в другой функции. Это говорит недействительный ключ нагрузки, «м»

+0

вы вызываете его из другой функции? Какая ошибка вы получаете? –

+2

* не работает * есть ** нет ** описание проблемы мы можем вам помочь. Пожалуйста, расскажите нам, что происходит не так. Что случилось, какие сообщения об ошибках вы получили, если они есть, и что вы ожидали вместо этого? –

+0

Он говорит, что недопустимый ключ нагрузки –

ответ

2

Ааа так, что происходит в том, что вы открываете файл один раз и закрыть его один раз, но и использовать его в два раза. Я взял свою собственную функцию разборки и попытался создать две вещи, и это дало мне ошибку.

это ошибка я получаю при использовании предыдущей функции:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 4, in pickleLoad 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1378, in load 
    return Unpickler(file).load() 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 858, in load 
    dispatch[key](self) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 880, in load_eof 
    raise EOFError 
EOFError 

но когда я редактировал его как таковой, то она работала хорошо:

import cPickle 
def unpickle(filename): 
    open_first = open(filename, "rb") 
    Dic1 = cPickle.load(open_first) 
    open_again = open(filename, "rb") 
    Dic2 = cPickle.load(open_again) 
    open_first.close() 
    open_again.close() 
    return Dic1,Dic2 

Но ваша функция возвращает то же самое содержание в двух переменных, так как у нас есть только один аргумент, а именно filename .., чтобы просто распечатать файл:

def unpickle(filename): 
    f = open(filename, "rb") 
    d = cPickle.load(f) 
    f.close() 
    return d 
+0

Большое вам спасибо;) –

+0

Предполагая, что OP не просто записывает два последовательных объекта в файл, да. Но формат marshalled позволяет вам просто записывать маринованные объекты в файл –

+0

hmmmm well, может быть, это исправляет его по какой-то другой причине ... и @ErikaSawajiri: если это работает, пожалуйста, повысьте и отметьте его как правильно, чтобы люди знали, что это является приемлемым решением –

Смежные вопросы