2015-09-04 39 views
0

我正在用OSX(10.6)編寫一個Python腳本,並使用Python 2.7。 我的命令是:在Python2中使用pickle加載utf-8文件

morphcache = codecs.open('file.txt','r','utf-8') 
    morphology = pickle.load(morphcache) 
    morphcache.close() 

它使用一個文本文件(UTF-8)包含新行和字符,如C,S,Z等其他網站產生

,因爲它使用轉義字符會報告這個錯誤:

Traceback (most recent call last): File "createxml.py", line 38, in <module> 
morphology = pickle.load(morphcache) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1378, in load 
return Unpickler(file).load() File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 858, in load 
dispatch[key](self) KeyError: 'sV\xc5\xbedeti\np1\nSVerb,\xc5\xbedeje,\xc5\xbedeti,\xc5\xbedeti,\xc5\xbedi,\xc5\xbedijo\np2\nsV\xc5\xbeupnik\np3\nVSu' make: *** [all] Error 1 

我正在尋找一個解決方案如何做到這一點的工作 - 該問題的所有解決方案都在說寫文本文件以不同的方式(而不是UTF-8)第一,但我不能這樣做它已經以這種形式得到了輸入文件。

或者應該首先以另一種方式讀寫這個文件到磁盤 - 然後重新打開被醃製?

謝謝。

+1

味酸是二進制文件的內容。不要將它們視爲UTF-8文本。 –

+2

爲什麼你首先將文件視爲泡菜? –

+0

我使用的腳本是使用pickle作爲它的過程。我將這個腳本用於我的語言,並試圖將其與我的文件一起使用 - 並且它不起作用。 https://code.google.com/p/apple-dictionary-plugins/source/browse/trunk/OpenThesaurus_Deutsch/createxml.py – slolibre

回答

0

Pickle文件不是文本文件。它們包含Python對象定義(可能包括unicode文本對象或str字節字符串)。

以二進制方式打開文件,並加載:

with open('file.txt', 'rb') as morphcache: 
    morphology = pickle.load(morphcache) 
+0

謝謝,可惜我還得到一個錯誤: 文件 「createxml.py」,第40行,在 形態=和pickle.load(morphcache) 文件「/System/Library/Frameworks/Python.framework/Versions/2.7/ lib/python2.7/pickle.py「,第1378行,載入中 return Unpickler(file).load() 文件」/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ pickle.py「,第858行,載入中 dispatch [key](self) 文件」/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py「,第1196行,在load_setitem key = stack.pop() IndexError:從空列表中彈出 make:*** [all] Error 1 – slolibre

+0

@slolibre:so you r pickle文件不完整或損壞。首先來自哪裏? –

+0

我使用的txt文件與德語使用的文件形式相同: https://code.google.com/p/apple-dictionary-plugins/source/browse/trunk/Morphologie_Deutsch/morphology -cache.txt – slolibre