我正在尝试使用以下代码读取文件。
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帖子中遵循了建议的解决方案,但无法解决它。任何帮助将不胜感激!
答案 0 :(得分: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')