2017-02-25 159 views
1

我正在尝试使用以下代码读取文件。UnicodeDecodeError:'ascii'编解码器无法解码位置5中的字节0xcc

precomputed = pickle.load(open('test/vgg16_features.p', 'rb')) 
features = precomputed['features'] 

但是得到这个错误。

UnicodeDecodeError: 'ascii' codec can't decode byte 0xcc in position 5: ordinal not in range(128) 

我想读取的文件包含使用深度神经网络提取的图像特征。文件内容如下所示。

(dp0 
S'imageIds' 
p1 
(lp2 
I262145 
aI131074 
aI131075 
aI393221 
aI393223 
aI393224 
aI524297 
aI393227 
aI393228 
aI262146 
aI393230 
aI262159 
aI524291 
aI322975 
aI131093 
aI524311 
.... 
.... 
.... 

请注意,这是一个大文件,大小为2.8GB。

我知道这是一个重复的问题,但我遵循其他stackoverflow帖子中的建议的解决方案,但无法解决它。任何帮助,将不胜感激!

回答

3

最后我找到了解决方案。这个问题实际上大约是unpickling a python 2 object with python 3,我首先无法理解,因为我得到的pickle文件是通过python 2程序编写的。

感谢this answer解决了这个问题。所以,我需要做的就是将encoding参数pickle.load()函数设置为latin1,因为latin1适用于任何输入,因为它将字节值0-255直接映射到前256个Unicode代码点。

所以,以下为我工作!

precomputed = pickle.load(open('test/vgg16_features.p', 'rb'), encoding='latin1') 
相关问题