打开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



相关文章
|
6天前
一劳永逸的方法解决:LNK1168无法打开 xxx.exe 进行写入 报错问题
一劳永逸的方法解决:LNK1168无法打开 xxx.exe 进行写入 报错问题
40 2
|
Windows
Windows下CMD中文乱码问题解决方法,设置代码页65001后仍然乱码
原文地址: http://blog.csdn.net/u011250882/article/details/48136883 在中文Windows系统中,如果一个文本文件是UTF-8编码的,那么在CMD.exe命令行窗口(所谓的DOS窗口)中不能正确显示文件中的内容。在默认情况下,命令行窗口中使用的代码页是中文或者美国的,即编码是中文字符集或者西文字符集。  如果想正确显示UTF-8
11620 0
|
6天前
|
Ubuntu
这个错误提示是因为`hgctl`工具在尝试打开浏览器时,找不到可执行的`xdg-open`文件
这个错误提示是因为`hgctl`工具在尝试打开浏览器时,找不到可执行的`xdg-open`文件
74 1
|
9月前
|
Android开发
eclipse设置代码自动保存步骤
eclipse设置代码自动保存步骤
|
网络协议 API 开发者
FFmpeg打开输入文件
本文介绍如何使用 FFmpeg 的 API 函数 avformat_open_input,avformat_find_stream_info 来打开跟获取一个输入文件的信息 (AVFormatContext )。
149 0
|
C++
提示编码有问题时,VS保存选项
提示编码有问题时,VS保存选项
54 0
|
编解码 Python
Geany导入带有中文字符的.py文件然后执行报错解决办法
Geany导入带有中文字符的.py文件然后执行报错解决办法
159 0
Geany导入带有中文字符的.py文件然后执行报错解决办法
cmd操作--关于exe可执行程序输出乱码的设置
cmd操作--关于exe可执行程序输出乱码的设置
414 0
cmd操作--关于exe可执行程序输出乱码的设置
|
监控 程序员
命令窗口修改编码,CMD编码修改方法
cmd中的编码方式为ANSI,若中文不是此编码方式则会出现乱码。作为程序员,会经常使用命令窗口查看执行日志,但是有时编码格式不对,大部分都是UTF8,在网上搜索了不少方法,很多没什么用,在这里教一个具体的方法,可以把命令窗口编码方式改为UTF8,接下来按步骤操作   第一步,打开命令窗口cmd ...
1337 0