打开pkl文件提示解码错误解决方法

简介: 打开pkl文件提示解码错误解决方法

具体错误描述

最近在处理一些pkl文件,安装了pickle这个三方库之后,我打算使用pickle.load(open(’XXX‘))的方法来打开pkl文件,结果报错了。pkl文件就是把数据转成二进制进行存储。

pickle提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上。

pickle模块只能在python中使用,python中几乎所有的数据类型(列表,字典,集合,类等)都可以用pickle来序列化,

pickle序列化后的数据,可读性差,人一般无法识别。说白了Pickle文件就是把数据转成二进制进行存储,是给机器看的不是给人看的。

上述我们已经说过了pickle序列化后的数据是二进制,那也就是说把文件作为二进制存储后,对于文件的读取会非常的快。如果有一个每个sheets为上万行的Excel,当我们直接读取这个excel文件后果你懂得。。有的小伙伴可能会说转成csv后进行读取,是的转csv后确实会比之前的xlsx格式的读取来的快些。但是读取之前计算机依然需要编译后再读取。文件一大还是很慢。那么这时候Pickle的优点就显现出来了。理解的pkl文件是二进制文件后具体看一下报错情况。

报错情况如下:

import pickle
#import cPickle as pickle 
inf = pickle.load(open('/root/气动仿真/NACA0012_DATA/train_max_min.pkl'))
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
Input In [25], in <cell line: 3>()
      1 import pickle
      2 #import cPickle as pickle 
----> 3 inf = pickle.load(open('/root/气动仿真/NACA0012_DATA/train_max_min.pkl'))
File /anaconda3/lib/python3.9/codecs.py:322, in BufferedIncrementalDecoder.decode(self, input, final)
    319 def decode(self, input, final=False):
    320     # decode input (taking the buffer into account)
    321     data = self.buffer + input
--> 322     (result, consumed) = self._buffer_decode(data, self.errors, final)
    323     # keep undecoded input until the next call
    324     self.buffer = data[consumed:]
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte

很明显这是一个编码问题,在解码的过程中发生了错误,与此类似的还有一个常见错误如下:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

具体解决方法

报错的原因就是不能正确的解码0x80这个字节了,也就是这个字节超出了utf-8的表示范围了,

inf = pickle.load(open('/root/气动仿真/NACA0012_DATA/train_max_min.pkl'))

在load里面加上了‘rb’就解决了。

解决之后现象

1.# -*- coding: utf-8 -*-
import pickle
#import cPickle as pickle 
inf = pickle.load(open('/root/气动仿真/NACA0012_DATA/train_max_min.pkl','rb'))
print(inf)

微信图片_20221017091215.png



目录
打赏
0
0
0
0
1
分享
相关文章
1.xshell传不了文件输出0000如何解决.....2.k8s中metalLB文件内容
1.xshell传不了文件输出0000如何解决.....2.k8s中metalLB文件内容
|
10月前
打开xshell无法定位程序输入点。。。。。。。。。。于动态链接库nssock2.dll上解决方法(参考)
打开xshell无法定位程序输入点。。。。。。。。。。于动态链接库nssock2.dll上解决方法(参考)
834 0
|
10月前
|
这个错误提示是因为`hgctl`工具在尝试打开浏览器时,找不到可执行的`xdg-open`文件
这个错误提示是因为`hgctl`工具在尝试打开浏览器时,找不到可执行的`xdg-open`文件
271 1
vs2018 设置了包含路径还是提示说打不开头文件
vs2018 设置了包含路径还是提示说打不开头文件
81 0
FFmpeg打开输入文件
本文介绍如何使用 FFmpeg 的 API 函数 avformat_open_input,avformat_find_stream_info 来打开跟获取一个输入文件的信息 (AVFormatContext )。
228 0
ffmpeg命令选项解释
ffmpeg作为媒体文件处理软件,基本用法如下: ffmpeg -i INPUTfile [OPTIONS] OUTPUTfile 输入输出文件通常就是待处理的多媒体文件了。可以是纯粹的音频文件,纯粹的视频文件,或者混合的。
1717 0
编译好的编译ffmpeg又出错:更改输出目录产生各种古怪错误
编译好的编译ffmpeg又出错:更改输出目录产生各种古怪错误
114 0
提示编码有问题时,VS保存选项
提示编码有问题时,VS保存选项
84 0
Python 技术篇-在cmd命令提示行里模拟动态下载进度条实例演示,cmd清除日志、打印动态内容方法
Python 技术篇-在cmd命令提示行里模拟动态下载进度条实例演示,cmd清除日志、打印动态内容方法
570 0
命令窗口修改编码,CMD编码修改方法
cmd中的编码方式为ANSI,若中文不是此编码方式则会出现乱码。作为程序员,会经常使用命令窗口查看执行日志,但是有时编码格式不对,大部分都是UTF8,在网上搜索了不少方法,很多没什么用,在这里教一个具体的方法,可以把命令窗口编码方式改为UTF8,接下来按步骤操作   第一步,打开命令窗口cmd ...
1401 0