繁体   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