DataLearner 标志DataLearnerAI
最新AI资讯
大模型评测
大模型列表
大模型对比
资源中心
Tools

加载中...

DataLearner 标志DataLearner AI

专注大模型评测、数据资源与实践教学的知识平台,持续更新可落地的 AI 能力图谱。

产品

  • 评测榜单
  • 模型对比
  • 数据资源

资源

  • 部署教程
  • 原创内容
  • 工具导航

关于

  • 关于我们
  • 隐私政策
  • 数据收集方法
  • 联系我们

© 2026 DataLearner AI. DataLearner 持续整合行业数据与案例,为科研、企业与开发者提供可靠的大模型情报与实践指南。

隐私政策服务条款
  1. 首页/
  2. 博客列表/
  3. 博客详情

Python中的Pickle操作(pkl文件解释)

2019/03/11 16:43:55
24,784 阅读
python序列化

作为数据科学家,您将以字典(dict)、数据框(DataFrame)或任何其他数据类型的形式使用数据集。 使用它们时,您可能希望将它们保存到文件中,以便以后可以使用它们或将它们发送给其他人。 这就是Python的pickle模块的用途:它将对象序列化,以便将它们保存到文件中,并在以后再次加载到程序中。

  • 什么是Pickle?
  • Pickle可以做什么?
  • 什么时候不能使用Pickle?
  • 用Pickle存储数据
  • 哪些对象可以用Pickle方式存取?
  • 代码示例
  • 保存对象到pickle文件中:
  • make an example object to pickle
  • note that this will overwrite any existing file
  • in the current working directory called 'mypickle.pickle'
  • 从pkl文件中读取对象:
  • 使用Pandas操作DataFrame的序列化

什么是Pickle?

您刚刚经历了一个耗时的过程,将一堆数据加载到python对象中。 也许你从数千个网站上爬取了数据。也许你计算了pi的数值。如果您的笔记本电脑电池耗尽或python崩溃,您的信息将丢失。

Pickling允许您将python对象保存为硬盘驱动器上的二进制文件。 在你pickle你的对象后,你可以结束你的python会话,重新启动你的计算机,然后再次将你的对象加载到python中。

如果需要,您可以将您的pickle文件备份到Google Drive或DropBox或普通的USB存储中。 你可以发邮件给朋友。

一句警告:不要加载你不信任的pkl文件。 恶意的人可以制作恶意的pkl文件,可能会在您的计算机上执行意外的代码(SQL注入,密码暴力强制等)。

Pickle用于序列化和反序列化Python对象结构,也称为marshalling或flattening。 序列化是指将内存中的对象转换为可以存储在磁盘上或通过网络发送的字节流的过程。之后,这个字符流可以被检索并将其反序列化回Python对象。 Pickle不要与压缩相混淆! 前者是将对象从一种表示(随机存取存储器(RAM)中的数据)转换为另一种表示(磁盘上的文本),而后者是使用较少位编码数据的过程,以节省磁盘空间。

Pickle可以做什么?

对于需要在数据中保持一定程度持久性的应用程序,Pickling非常有用。 您的程序的状态数据可以保存到磁盘,因此您可以稍后继续处理它。 它还可用于通过传输控制协议(TCP)或套接字连接(Socket)发送数据,或将python对象存储在数据库中。 当您使用机器学习算法时,Pickle非常有用,您可以将它们保存在以后能够进行新的预测,而无需重新编写所有内容或重新训练模型。

什么时候不能使用Pickle?

如果要使用不同编程语言的数据,建议不要使用pickle。 它的协议特定于Python,因此不保证跨语言兼容性。 对于不同版本的Python本身也是如此。 不同版本的Python中反序列化Pickle的文件可能并不总是正常工作,因此您必须确保使用相同的版本并在必要时执行更新。您最好不要从不受信任的来源中取消数据。因为解压缩时可能会执行文件中的恶意代码。

用Pickle存储数据

哪些对象可以用Pickle方式存取?

您可以使用以下数据类型来pickle对象:

布尔值, 整数, 花车, 复数, (普通和Unicode)字符串, 元组, 列表, 集合,和 获取可选对象的字典。 以上所有内容都可以进行Pickle操作,但您也可以对类和函数执行相同的操作,例如,如果它们是在模块的顶层定义的。

然而,并非所有东西都可以被轻易Pickle:例如,生成器,内部类,lambda函数和默认值。 对于lambda函数,您需要使用名为dill的附加包。 使用defaultdicts,您需要使用模块级函数创建它们。

代码示例

保存对象到pickle文件中:
import pickle

# make an example object to pickle
some_obj = {'x':[4,2,1.5,1], 'y':[32,[101],17], 'foo':True, 'spam':False}

with open('mypickle.pickle', 'wb') as f:
    pickle.dump(some_obj, f)

# note that this will overwrite any existing file
# in the current working directory called 'mypickle.pickle'
从pkl文件中读取对象:
with open('mypickle.pickle') as f:
    loaded_obj = pickle.load(f)

print 'loaded_obj is', loaded_obj
使用Pandas操作DataFrame的序列化
import pandas as pd

df = pd.DataFrame([range(11), range(100,110)], columns=list('abcdefghijk'))
df.to_pickle('my_df.pickle')

df2 = pd.read_pickle('my_df.pickle')

本文翻译自: https://ianlondon.github.io/blog/pickling-basics/ https://www.datacamp.com/community/tutorials/pickle-python-tutorial

DataLearner 官方微信

欢迎关注 DataLearner 官方微信,获得最新 AI 技术推送

DataLearner 官方微信二维码
返回博客列表

相关博客

  • PyTorch 2.0发布——一个更快、更加Pythonic和灵活的PyTorch版本,让Tranformer运行更快!
  • 0基础安装搭建Visual Studio Code开发环境——Python开发环境
  • KerasCV——一个新的简单易用的计算机视觉(CV)算法库
  • Python for Data Analysis第三版免费在线学习网站来临!
  • Python3.11最新特性来了,多个好特性提升!
  • 为什么Python可以处理任意长度的整数运算——Python原理详解
  • Python编程环境搭建——小白起步教程!
  • Bloomberg发布的最新的memray——Python内存分析器是什么?

热门博客

  • 1Dirichlet Distribution(狄利克雷分布)与Dirichlet Process(狄利克雷过程)
  • 2回归模型中的交互项简介(Interactions in Regression)
  • 3贝塔分布(Beta Distribution)简介及其应用
  • 4矩母函数简介(Moment-generating function)
  • 5普通最小二乘法(Ordinary Least Squares,OLS)的详细推导过程
  • 6使用R语言进行K-means聚类并分析结果
  • 7深度学习技巧之Early Stopping(早停法)
  • 8手把手教你本地部署清华大学的ChatGLM-6B模型——Windows+6GB显卡本地部署