2017-10-18 127 views
1

我不能在虛擬機上做一個simpe pickle負載。 這是簡單的演示代碼。不能做pickle.load

[email protected]:~# python 
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import pickle 
>>> x = {1:2 } 
>>> f = open ('demo', 'wb+') 
>>> f 
<open file 'demo', mode 'wb+' at 0x7fae71b44660> 
>>> pickle.dump(x, f) 
>>> 
>>> 
>>> f.close() 
>>> 
>>> 
>>> p = open('demo', 'wb+') 
>>> p 
<open file 'demo', mode 'wb+' at 0x7fae71b446f0> 
>>> a = pickle.load (p) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/pickle.py", line 1384, in load 
    return Unpickler(file).load() 
    File "/usr/lib/python2.7/pickle.py", line 864, in load 
    dispatch[key](self) 
    File "/usr/lib/python2.7/pickle.py", line 886, in load_eof 
    raise EOFError 
EOFError 

我已經使用酸洗和拆除前數次大數據,但沒有遇到這個問題。我也嘗試過'r+''w+'

我發現This培訓相關,但解決方案涉及增加RAM,這是不可能在我的情況,

還有一些處理泡菜錯誤的幾個問題,但他們大多曾與​​文件打開方式的問題。

+0

如果你用'r',**給我們**得到相同的行爲,不要在文本中斷言它。 'w'的失敗是完全不令人驚訝的 - 這是人們可以/應該期待的。 –

回答

2

您嘗試加載的文件句柄(p)以模式wb+打開。這會在打開時截斷文件長度爲零,所以pickle.load沒有取消任何操作,因此EOFError。也許你打算使用rb+來代替?

+0

我不知道它截斷了文件。 我將模式替換爲'rb +'來代替pickle.dump和pickle.load,它工作正常。謝謝 – Dave