美文网首页Python我爱编程
python 利用pickle存大数据

python 利用pickle存大数据

作者: 章光辉_数据 | 来源:发表于2018-04-01 21:03 被阅读255次

背景音乐:梦中的婚礼 - Richard Clayderman

最近在处理一份数据,有一个巨大的、字典型的中间变量,由于今后会持久、高频地使用,因此我考虑将其保存成类似于matlab的.mat格式的数据,方便以后随时读取。

理所当然地会想到利用pickle来保存数据,因为这是在python环境下最常用也最简单的存储数据的方式。

python存储数据的方法有很多,最常用的做法就是利用pickle模块,当然还有其他做法,比如存成json、txt等格式。至于pandas、h5等方式的另说哈~

pickle模块介绍

pickle模块实现了用于序列化和反序列化python对象结构的二进制协议。 序列化操作"pickling"是将python对象层次结构转换为字节流的过程,反序列化操作 "unpickling"则是将字节流转换回对象层次结构。

不得不提到的是,pickle是python所独有的,因此非python程序可能无法重构pickle对象。在工作中,我就遇到一个问题,就是我用sklearn训练得到的机器学习模型,用pickle保存下来后,工程方面的同事是没法用java调用这个模型的,一个临时的方法是有位同事读pickle源码,自己用java一步步反序列化回来,佩服佩服。

pickle使用技巧

对于最简单的代码,使用 dump() 和 load() 函数便足够了。

import pickle
a = 1

# 保存
with open('data.pickle', 'wb') as f:
    pickle.dump(data, f)

# 读取
with open('data.pickle', 'rb') as f:
    b = pickle.load(f)

但如果你读过pickle的说明文档的话,会发现有个参数叫做protocol。参数protocol代表了序列化模式(pickle协议),在python2.X版本默认值为0,在python3.X本默认值为3。简而言之,不同的python版本对应着不同的最高协议,同时protocol值越大,代表了所用的协议版本越高。如图所示,

那么修改protocol会有什么影响呢?protocol值越大,dump的速度越快,并且支持的数据类型更多,保存下来的文件占用空间更小,同时也带来一些其他优化,例如在python3.4中,协议版本4新支持对非常大的数据进行序列化。因此可以的话,请选择最高协议版本作为protocol参数的值,即设protocol=pickle.HIGHEST_PROTOCOL即可。

那么,上面的那段代码可以改成:

import pickle
a = 1

# 保存
with open('data.pickle', 'wb') as f:
    pickle.dump(data, f, protocol=pickle.HIGHEST_PROTOCOL)

# 读取
with open('data.pickle', 'rb') as f:
    b = pickle.load(f)

可能,对于小数据,影响不会很大。
但当你需要对大数据进行序列化的时候,请记得pickle的这个技巧。

相关文章

  • python 利用pickle存大数据

    背景音乐:梦中的婚礼 - Richard Clayderman 最近在处理一份数据,有一个巨大的、字典型的中间变量...

  • Python保存工作空间的数据(pickle your data

    [toc] 通用方法 pickle python的pickle模块实现了基本的数据序列和反序列化。通过pickle...

  • Python3 pickle模块的使用详解

    pickle 模块 序列化 pickle模块特点 1、只能在python中使用,只支持python的基本数据类型。...

  • 文件操作

    打开、读/写文件 pickle python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块...

  • 序列化

    在 Python 中 pickle 模块实现对数据的序列化和反序列化。pickle 支持任何数据类型,包括内置数据...

  • Python百宝箱

    1.对Json数据的读取、存入 json数据存储为Python字典格式,python模块中有json.pickle...

  • python 基础之pickle 与json 报错问题解决方案

    Python 基础之pickle与json 有没有在搞pickle与json在进行数据储存的时候老是报错,这个有些...

  • 2018-02-07

    python pickle模块:python变量及对象的序列化 1、pickle.dump 将python变量...

  • Lesson 035 —— pickle 模块

    Lesson 035 —— pickle 模块 关于 pickle 模块的一些方法介绍。pickle是Python...

  • python学习笔记--pickle模块

    Python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行...

网友评论

    本文标题:python 利用pickle存大数据

    本文链接:https://www.haomeiwen.com/subject/qxxmtftx.html