我正在尝试使用以下代码读取文件。
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.8 of。
我知道这是一个重复的问题,但我遵循了其他stackoverflow帖子中的建议解决方案,但无法解决它。任何帮助都将不胜感激!
发布于 2017-02-26 01:47:58
最后我找到了解决方案。问题实际上是关于unpickling a python 2 object with python 3的,我一开始无法理解它,因为我得到的pickle文件是通过Python2程序编写的。
多亏了this answer,它解决了这个问题。因此,我需要做的就是将pickle.load()
函数的encoding
参数设置为latin1
,因为latin1
可以处理任何输入,因为它将字节值0-255直接映射到前256个Unicode码点。
所以,下面的方法对我很有效!
precomputed = pickle.load(open('test/vgg16_features.p', 'rb'), encoding='latin1')
https://stackoverflow.com/questions/42452255
复制相似问题