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

标签:#python##序列化#

时间:2019/03/11 16:43:55

作者:小木

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

[TOC]

#### 什么是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文件中:

```python

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文件中读取对象:

```python

with open('mypickle.pickle') as f:

loaded_obj = pickle.load(f)

print 'loaded_obj is', loaded_obj

```

##### 使用Pandas操作DataFrame的序列化

```python

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

php调用python pkl_Python中的Pickle操作(pkl文件解释)相关推荐

  1. 在python程序中的进程操作

    ********在python程序中的进程操作********之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了, 运行中的程序就是一个进程.所有的进程都是通过 ...

  2. python在中小学教学中的应用-在python程序中的进程操作

    ********在python程序中的进程操作********之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了, 运行中的程序就是一个进程.所有的进程都是通过 ...

  3. Python实例篇:这样操作PDF文件一点都不枯燥了

    前言 大家好,我是辣条 之前辣条有发布过我们常用的两个技能点,今天第三个技能点(PDF)他来了 <Python实例篇:自动操作Excel文件(既简单又特别实用)> <Python技巧 ...

  4. php 操作 PSD,PHP中使用Imagick操作PSD文件实例,_PHP教程

    PHP中使用Imagick操作PSD文件实例, 前提 复制代码 代码如下: $im = new Imagick("test.psd"); 获取图层数目 复制代码 代码如下: $nu ...

  5. pickle与.pkl文件

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

  6. python 3 中的pickle模块 阿波的博客

    只是说pickle模块的最简单的使用,如果想要仔细学习pickle的话,可以找一下别的博客,或者阅读一下pickle的源代码.查阅一下文档都是可以的, 那就先看一下如何找到pickle的源程序嘞... ...

  7. 【python】中的“.T”操作:转置

    python中的".T"操作 - 回忆瞬间 - 博客园 https://www.cnblogs.com/peixu/p/7991715.html 其实就是对一个矩阵的转置. 看代码 ...

  8. qt5调用python脚本 两次失败_Qt5调用Python脚本中的函数

    我有一个简单的Qt5项目,有一个按钮和一个文本字段,我也在项目中创建了一个py文件来检查如何从Qt调用python文件中的函数.在 虽然现在我卡住了:我有我的测试cpp.h和测试cpp.cpp,其中我 ...

  9. go语言中的读写操作以及文件的复制

    目录 一.文件读写 1.读取文件中的数据: 2.写出数据到本地文件: 二.文件复制 1.方法一:io包下的Read()和Write()方法实现 2.方法二:io包下的Copy()方法实现 3.方法三: ...

最新文章

  1. win7怎么关闭虚拟机服务器,大师教您Win7系统怎么彻底关闭退出vmware虚拟机的处理要领...
  2. php 多维数组排序_已迁移
  3. 2019.2.7 区块链论文翻译
  4. Cisco 3560 丢失 IOS 解决过程
  5. ubuntu没有interfaces文件_Samba共享Ubuntu文件到Windows中
  6. Spring Cloud实战小贴士:Zuul的饥饿加载(eager-load)使用
  7. SQL基础(五)-- 递归
  8. 按位与 matlab,c# 按位与,按位或
  9. 学完HTML5后可以开发哪些互联网产品呢?
  10. Spock 1.2 –轻松进行集成测试中的Spring Bean模拟
  11. 第一个Android程序
  12. Matrix响应式软件应用类型博客模板
  13. GRPC编译安装及测试
  14. java项目计算器关键思路_JAVA项目实战(计算器)
  15. 图解通信原理与案例分析-34:车联网中的系统架构与主要的通信技术
  16. 变频无线发射机系统电路设计详解
  17. spoj2142 Arranging Flowers
  18. 电视剧房前屋后剧情介绍第1-47集
  19. 公司电脑监控软件究竟有何作用?
  20. java hh24miss_Java编程时间格式与数据库中时间格式转化

热门文章

  1. Source Insight 4.x完美激活破解安装图文教程
  2. php仅显示月份的日历,JSP_用JSP实现的一个日历程序,!-- 显示任意年、月的日历 - phpStudy...
  3. 为什么要经常阅读和分析计算机SCI期刊论文? - 易智编译EaseEditing
  4. 中国股票市场底在哪?房产银行引领政策底
  5. 西安计算机三本院校排名2015,2015年陕西三本院校排名
  6. 低代码开发平台除了织信informat还有哪些?
  7. 电脑开机出现grub
  8. 什么是长连接和短连接?
  9. C#类的成员之Field(字段)
  10. 数据库概念mongodb使用数据库CLUD操作