簡體   English   中英

在python中加載文件時出現UnicodeDecodeError

[英]UnicodeDecodeError while loading file in python

我正在運行這個:

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:'utf-8'編解碼器無法解碼位置39:無效的繼續字節的字節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),但是嘗試了很多次后我無法修復它。 謝謝!!!

ps這是來自http://scikit-learn.org/stable/auto_examples/text/mlcomp_sparse_document_classification.html#example-text-mlcomp-sparse-document-classification-py的ML教程

好吧,我找到了解決方案。 使用

open(f, encoding = "latin1")

我不確定為什么它只在我的Mac上發生。 希望知道。

實際上,在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`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM