2016-05-26 5 views
1

У меня есть файл pickle с использованием формата .txt. Я хочу загрузить этот файл pickle с помощью python 2.7. Размер составляет 438,5 МБ. Это, как я загружаю данные:python: pickle.load() raise EOFError

def readpickle(path="C:/Python27/Lib/site-packages/xy/"): 
with open(path+"filenamereal2.txt","rb") as f: 
    model = pickle.load(f) 

return model 

И я получаю эту ошибку

itemmodelreal=readpickle(path="C:/Users/Lab Komputasi/Documents/estu/") 
Traceback (most recent call last): 
File "<ipython-input-33-265e46f74915>", line 1, in <module> 
    itemmodelreal=readpickle(path="C:/Users/Lab Komputasi/Documents/estu/") 

    File "<ipython-input-31-fbd3e8b9e043>", line 3, in readpickle 
    model = pickle.load(f) 

    File "C:\Users\Lab Komputasi\Anaconda2\lib\pickle.py", line 1384, in load 
    return Unpickler(file).load() 

    File "C:\Users\Lab Komputasi\Anaconda2\lib\pickle.py", line 864, in load 
    dispatch[key](self) 

    File "C:\Users\Lab Komputasi\Anaconda2\lib\pickle.py", line 886, in load_eof 
    raise EOFError 

EOFError 

это код, который я использую, чтобы написать рассол:

with open("filenamereal3.txt", "wb") as f: 
    pickle.dump(result, f) 
f.close() 

Я использовал чтение бинарного ('rb') для загрузки и записи двоичного файла ('wb') для записи, но он все еще имеет эту ошибку. У вас есть идея, почему все еще ошибка? как я могу решить эту ошибку?

Спасибо за вашу помощь ....

+0

Мы не можем видеть, какой файл вы распечатываете, вы уверены, что он правильный? И действительно ли вы открываете его в режиме «rb»? Было бы хорошо, если бы мы могли видеть код, который вы используете для рассыпания. –

+0

@Rawing извините, я отредактировал его сейчас – estu

+0

Вы сбрасываете на 'filenamereal3', но загружаете' filenamereal2'? –

ответ

4

Чтобы загрузить данные, не вы хотите быть чтение данных («Р.Б.») вместо записи данных («термометр»)?

Загрузка данных должен выглядеть следующим образом:

with open("C:/Users/Lab Komputasi/Documents/estu/filenamereal1.txt", "rb") as f: 
    data = pickle.load(f) 

Кроме того, с помощью f.close() не является необходимым, потому что вы используете с/в качестве пункта.

+0

thx для вашего совета, но я использовал этот код без f.close(), но это была ошибка в отношении операции ввода-вывода ierror в закрытом файле, поэтому мне предложили ее использовать. Но после того, как эра была решена. В коде есть 'EOFError' – estu

+0

@estu. Тогда я не знаю, как решить проблему! Ваш код выглядит отлично. Убедитесь, что ваш файл не поврежден/поврежден. Кроме того, вы можете прочитать документацию об ошибке «Окончательный файл» и убедиться, что все, что вы травляете, является способным к размаху. –

4

Я столкнулся с такой же ошибкой при загрузке большого файла, сбрасываемого в самом высоком протоколе.

Это, кажется, ошибка библиотеки рассола. Я решил это, используя cPickle.

import cPickle as pickle 
Смежные вопросы