pickle与.pkl文件

2023-11-16

经常遇到在Python程序运行中得到了一些字符串、列表、字典等数据,想要保存下来,长长久久的,方便以后使用,这个时候Pickle模块就派上用场了。pickle 模块及其同类模块 cPickle 向 Python 提供了 pickle 支持,它可以将对象转换为一种可以传输或存储的格式(后者使用 C 编码,具有更好的性能)。

pickle对python对象的转换

Pickle模块将任意一个Python对象转换成一系统字节的这个操作过程叫做串行化对象。
pickle 模块提供了以下函数对:dumps(object) 返回一个字符串,它包含一个 pickle 格式的对象;loads(string) 返回包含在 pickle 字符串中的对象。

import pickle
from pprint import pprint

a = [1,2,[3,4],'pyth','pickle']
pprint(a)

b = pickle.dump(a)
c = pickle.load(b)
pprint(b)
pprint(c)

因为我的服务器没有cPickle,所以使用pickle。pprint与print的差别是,对于很长很复杂的输出,pprint会根据数据结构分行输出,方便查看。上面代码的输出如下。

[1, 2, [3, 4], ‘pyth’, ‘pickle’]
(b’\x80\x03]q\x00(K…x06’b’\x00…pickleq\x03e.’)
[1, 2, [3, 4], ‘pyth’, ‘pickle’]

  • 中间太长了就省略了。

将数据结构保存到.pkl文件

dump(object, file) 将对象写到文件,这个文件可以是实际的物理文件,但也可以是任何类似于文件的对象,这个对象具有 write() 方法,可以接受单个的字符串参数。缺省情况下, dumps() 和 dump() 使用可打印的 ASCII 表示来创建 pickle。

import pickle

s1 = 'pickle'
s2 = {'a':'one','b':'two','c':'three'}
s3 = ['faith','hope','love']

fil = open('demo.pkl', 'wb')

pickle.dump(s1, fil)
pickle.dump(s2, fil, True)
pickle.dump(s3, fil, 1)

fil.close()
  • final 参数(可选)如果为 True ,则该参数指定用更快以及更小的二进制表示来创建 pickle;
  • 3种索引,0为ASCII,1是旧式2进制,2是新式2进制协议,不同之处在于后者更高效一些。

读取.pkl文件数据

load(file) 返回包含在 pickle 文件中的对象。loads() 和 load() 函数自动检测 pickle 是二进制格式还是文本格式。

fie = open('demo.pkl', 'rb')

t1 = pickle.load(fie)
t2 = pickle.load(fie)
t3 = pickle.load(fie)

pprint(t1)
pprint(t2)
pprint(t3)

t4 = pickle.load(fie)

输出为

‘pickle’
{‘a’: ‘one’, ‘b’: ‘two’, ‘c’: ‘three’}
[‘faith’, ‘hope’, ‘love’]

EOFError: Ran out of input

Python2与Python3的兼容问题

Python3不支持cPickle,因而在Python2中储存的pkl文件在Python3中打开时会出现错误,如

fil = open('test.pkl', 'rb')
dat = pickle.load(fil)

会出现解码错误;

UnicodeDecodeError: ‘ascii’ codec can’t decode byte … in position x: ordinal not in range(128)

此时需要用encode对文件中的字符串制定编码格式,则正常读取。

dat = pickle.load(fil, encoding = 'iso-8859-1')

参考资料
百度经验 python如何将数据转成.pkl文件
新浪博客 pickle及cPickle模块_努力向前
CSDN oo笨小孩oo python3使用pickle读取文件提示TypeError或者UnicodeDecodeError的解决办法,原文链接link.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pickle与.pkl文件 的相关文章

随机推荐

  • python中的连续比较是什么_Python算法的分治算法,python,之,连续,子,列表,最大,和...

    连续子列表的最大和 在一个列表中找到连续子列表的最大和 列表中的数字可负可正 并且子列表不能为空 问题提出 找到以下列表的最大子列表的和 2 1 3 4 1 2 1 5 4 解题思路 最大子列表有可能在左子列表 右子列表与右子列表之间 我们
  • python小数格式:不用科学计数法、不截断

    对于一个小数 如 0 0000000000001 想得到相应的字符串 而不是转换为 1e 12 可以用 numpy 的 format float positional import numpy as np a 0 0001 b 0 0000
  • anaconda安装所有库代码集总

    1 安装jupyter conda install jupyter
  • 接口请求合并的3种技巧,性能直接爆表!

    将相似或重复请求在上游系统中合并后发往下游系统 可以大大降低下游系统的负载 提升系统整体吞吐率 文章介绍了 hystrix collapser ConcurrentHashMultiset 自实现BatchCollapser 三种请求合并技
  • 5.3.6 复合主键@IdClass

    有时一个实体的主键可能同时为多个 例如同样是之前使用的 CustomerEO 实体 需要通过name和email来查找指定实体 当且仅当name和email的值完全相同时 才认为是相同的实体对象 要配置这样的复合主键 步骤如以下所示 1 编
  • 快速排序(Java实现) 单边循环、多边循环

    package com xiaoxin sort import java util Arrays public class quickSort me public static void main String args int arr 9
  • 关于CSS及JS的使用技巧浅谈

    使用CSS预处理器 例如Sass和Less 可以帮助开发者更快速 更有效地编写CSS代码 模块化 将CSS和JS代码分解为模块 可以帮助开发者更好地组织和管理代码 压缩和合并 使用压缩工具可以帮助减少CSS和JS文件的大小 使网站更容易加载
  • minikube单机安装nfs服务

    1 安装 nfs server sudo apt get update sudo apt get install y nfs kernel server 2 创建目录 配置 IP 共享目录绑定 vim etc exports 新增 data
  • Shiro权限框架-实现分布式会话SessionManager(7)

    1 会话的问题 2 分布式会话实现思路 1 原理分析 所有服务器的session信息都存储到了同一个Redis集群中 即所有的服务都将 Session 的信息存储到 Redis 集群中 无论是对 Session 的注销 更新都会同步到集群中
  • vue+elementUI图片预览,<el-image> 的使用

    vue elementUI图片预览 el image 的使用 本文转载自 https www cnblogs com allanlau p 13397625 html 首页定义data data return imgs imgsVisibl
  • 手把手教你使用transciver-ip核的配置

    目前很多行业都会用到transceiver 甚至像pcie srio等高速接口都调用了transceiver 所以了解并学会其使用方法还是很重要的 本文结合作者的使用经验 让你快速的了解并上手使用 Xilinx提供了Transceivers
  • (Scikit-Learn)朴素贝叶斯使用方法:高斯朴素贝叶斯 多项式朴素贝叶斯(文本分类)

    在贝叶斯分类中 我们希望确定一个具有某些特征的样本属于某类标签的概率 通常记为 P L 特征 贝叶斯定理告诉我们 可以直接用下面的公式计算这个概率 假如需要确定两种标签 定义为 L1 和 L2 一种方法就是计算这两个标签的后验概率的比值 其
  • Python自学之路第九步——用户输入和while循环

    主要用到的是input 函数 他可以接受用户的输入 这样便可以编写交互式的程序了 还介绍了while循环 这个和C中一样 包括if判断都可以尝试测试一下 很有意思 函数input pr 我们将统计您的基本信息 pr n请输入您的名字 nam
  • Mybatis - NoSuchMethodError: net.sf.jsqlparser.statement.select.SetOperationList.getSelects()Ljava/

    昨天在修改一个接口功能时 需要在原来的接口上提供分页和模糊查询 就使用了分页 PageHelper来做 但是在mybatis的xml文件中又使用了UNION来合并查询结果 导致项目启动直接报错 Handler processing fail
  • MySQL 中读写分离可能遇到的问题

    前言 MySQL 中读写分离是经常用到了的架构了 通过读写分离实现横向扩展的能力 写入和更新操作在源服务器上进行 从服务器中进行数据的读取操作 通过增大从服务器的个数 能够极大的增强数据库的读取能力 MySQL 中的高可用架构越已经呈现出越
  • ubuntu 光盘读取

    把光盘放入光驱后 要挂载光驱 将光驱设备挂在到 mnt 下 sudo mount dev sr0 mnt mount dev sr0 is write protected mounting read only 到 mnt目录下就可以看到光盘
  • 一条SQL语句求前面记录的平均值

    有算法要求如下 For i 1 i lt 10 i ta i t 1 t 2 t i i 用一条SQL语句实现它 分别用表变量 ta 和 t 来对应 ta 和 t declare t table id int d decimal 18 4
  • 第一课 认识Python

    相比大家都听说过Python是一门容易学习的语言 那么实际是怎么样呢 我们从以下几点看看 1 首先 Python是最容易学习和最好用的语言 Python容易阅读和编写 比较清晰 格式非常简洁 表达能力强 这样同样写一个程序 Python比其
  • uniApp条件编译以及跳转方法

    1 使用Uniapp的方法获取系统环境 仅在JS中可以使用 uni getSystemInfoSync platform 获取应用所在的平台 if uni getSystemInfoSync platform ios if uni getS
  • pickle与.pkl文件

    经常遇到在Python程序运行中得到了一些字符串 列表 字典等数据 想要保存下来 长长久久的 方便以后使用 这个时候Pickle模块就派上用场了 pickle 模块及其同类模块 cPickle 向 Python 提供了 pickle 支持