2016-07-29 56 views
0

加載文件我運行此:的UnicodeDecodeError而在蟒蛇

news_train = load_mlcomp('20news-18828', 'train') 
vectorizer = TfidfVectorizer(encoding='latin1') 
X_train = vectorizer.fit_transform((open(f, errors='ignore').read() 
           for f in news_train.filenames)) 

,但它得到的UnicodeDecodeError:在39位「UTF-8」編解碼器不能解碼字節0xe4:無效延續字節。在open()函數中。

我檢查了news_train.filenames。它是:

array(['/Users/juby/Downloads/mlcomp/379/train/sci.med/12836-58920', 
     ..., '/Users/juby/Downloads/mlcomp/379/train/sci.space/14129-61228'], 
     dtype='<U74') 

路徑看起來正確。這可能是關於dtype或我的環境(我是Mac OSX 10.11),但我嘗試了很多次後無法修復它。謝謝!!!

P.S它從http://scikit-learn.org/stable/auto_examples/text/mlcomp_sparse_document_classification.html#example-text-mlcomp-sparse-document-classification-py

+1

Python 3?試試'open(f,mode ='rb',errors ='ignore')'。 –

+0

是的,它是Python3.5。我做到了,但我得到了「二進制模式不接受錯誤參數」 – Denly

+0

只要刪除錯誤='忽略'可以做到這一點。或者你自己發佈的答案。 –

回答

0

嗯,我找到了解決方案ML教程。使用

​​

我不知道爲什麼它只發生在我的mac雖然。想知道它。

0

實際上,在Python 3+中,open函數打開並以默認模式讀取文件'r',該文件將解碼文件內容(在大多數平臺上以UTF-8格式)。由於您的文件使用latin1編碼,因此使用UTF-8對其進行解碼可能導致UnicodeDecodeError。解決方法是以二進制模式打開文件('rb'),或者指定正確的編碼(encoding="latin1")。

open(f, 'rb').read() # returns `byte` rather than `str` 
# or, 
open(f, encoding='latin1').read() # returns latin1 decoded `str`