python pickle存储、读取大数据量列表、字典数据的方法

 更新时间:2019年07月07日 09:31:40   作者:要啥名字  
pickle模块实现了用于序列化和反序列化python对象结构的二进制协议。这篇文章主要介绍了python pickle存储、读取大数据量列表、字典的数据,需要的朋友可以参考下

先给大家介绍下python pickle存储、读取大数据量列表、字典的数据

针对于数据量比较大的列表、字典,可以采用将其加工为数据包来调用,减小文件大小

#列表
  #存储
  list1 = [123,'xiaopingguo',54,[90,78]]
  list_file = open('list1.pickle','wb')
  pickle.dump(list1,list_file)
  list_file.close()
 
  #读取
  list_file = open('list1.pickle','rb')
  list2 = pickle.load(list_file)
  print(list2)
 
#字典
  #存储
  list3 = {'12': 123, '23': 'xiaopingguo', '34': 54, '45': [90, 78]}
  list3_file = open('list3.pickle', 'wb')
  pickle.dump(list3, list3_file)
  list3_file.close()
  # # 读取
  list3_file = open('list3.pickle', 'rb')
  list3 = pickle.load(list3_file)
  print(list3)

  print(list3['23']

ps:下面看下python 利用pickle存大数据

最近在处理一份数据,有一个巨大的、字典型的中间变量,由于今后会持久、高频地使用,因此我考虑将其保存成类似于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存储、读取大数据量列表、字典的数据的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧

相关文章

  • Pycharm中如何关掉python console

    Pycharm中如何关掉python console

    这篇文章主要介绍了Pycharm中如何关掉python console,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • 可能是史上最细的python中import详解

    可能是史上最细的python中import详解

    import在python中的意思是用来调用模块的,下面这篇文章主要给大家介绍了关于python中import详解的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • python celery beat实现定时任务的示例代码

    python celery beat实现定时任务的示例代码

    在日常工作中,我们常常会用到需要周期性执行的任务,本文主要介绍了python celery beat实现定时任务的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • python playwright--pytest-playwright、pytest-base-url插件编写用例

    python playwright--pytest-playwright、pytest-base-url插件编

    这篇文章主要介绍了python playwright--pytest-playwright、pytest-base-url插件编写用例,它提供上下文隔离,开箱即用地在多个浏览器配置上运行,它继承了pytest框架,以及支持playwright的一些基础使用,需要的朋友可以参考下
    2023-05-05
  • Python字符串格式化输出代码实例

    Python字符串格式化输出代码实例

    这篇文章主要介绍了Python字符串格式化输出代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • python中的常用运算符和优先级

    python中的常用运算符和优先级

    这篇文章主要介绍了python中的常用运算符和优先级,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • python数据库操作mysql:pymysql、sqlalchemy常见用法详解

    python数据库操作mysql:pymysql、sqlalchemy常见用法详解

    这篇文章主要介绍了python数据库操作mysql:pymysql、sqlalchemy常见用法,结合实例形式分析了Python mysql操作库pymysql、sqlalchemy基本使用技巧与操作注意事项,需要的朋友可以参考下
    2020-03-03
  • 详解Python中的元组与逻辑运算符

    详解Python中的元组与逻辑运算符

    这篇文章主要介绍了Python中的元组与逻辑运算符的用法,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • Python中的列表生成式与生成器学习教程

    Python中的列表生成式与生成器学习教程

    这篇文章主要介绍了Python中的列表生成式与生成器学习教程,Python中的Generator生成器比列表生成式功能更为强大,需要的朋友可以参考下
    2016-03-03
  • python 读txt文件,按‘,’分割每行数据操作

    python 读txt文件,按‘,’分割每行数据操作

    这篇文章主要介绍了python 读txt文件,按‘,’分割每行数据操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07

最新评论