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


Posted in Python onJuly 07, 2019

先给大家介绍下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存储、读取大数据量列表、字典的数据的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧

Python 相关文章推荐
用Python实现QQ游戏大家来找茬辅助工具
Sep 14 Python
Python中使用strip()方法删除字符串中空格的教程
May 20 Python
Python切换pip安装源的方法详解
Nov 18 Python
tensorflow: 查看 tensor详细数值方法
Jun 13 Python
用Python编写一个简单的CS架构后门的方法
Nov 20 Python
在Pycharm中将pyinstaller加入External Tools的方法
Jan 16 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
Jul 01 Python
python如何给字典的键对应的值为字典项的字典赋值
Jul 05 Python
Pytorch中index_select() 函数的实现理解
Nov 19 Python
Python实现中值滤波去噪方式
Dec 18 Python
Python 简单计算要求形状面积的实例
Jan 18 Python
浅析NumPy 切片和索引
Sep 02 Python
python保存字典和读取字典的实例代码
Jul 07 #Python
python 实现创建文件夹和创建日志文件的方法
Jul 07 #Python
python 画二维、三维点之间的线段实现方法
Jul 07 #Python
Python调用百度根据经纬度查询地址的示例代码
Jul 07 #Python
选择Python写网络爬虫的优势和理由
Jul 07 #Python
python和c语言的主要区别总结
Jul 07 #Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
Jul 06 #Python
You might like
模板引擎正则表达式调试小技巧
2011/07/20 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
PHP中如何使用session实现保存用户登录信息
2015/10/20 PHP
PHP微信开发之模板消息回复
2016/06/24 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
简单的pgsql pdo php操作类实现代码
2016/08/25 PHP
不错的新闻标题颜色效果
2006/12/10 Javascript
jquery 3D球状导航的文章分类
2010/07/06 Javascript
javascript (用setTimeout而非setInterval)
2011/12/28 Javascript
Js数组的操作push,pop,shift,unshift等方法详细介绍
2012/12/28 Javascript
jquery 元素控制(追加元素/追加内容)介绍及应用
2013/04/21 Javascript
js如何实现设计模式中的模板方法
2013/07/23 Javascript
ListBox实现上移,下移,左移,右移的简单实例
2014/02/13 Javascript
asp知识整理笔记3(问答模式)
2015/09/27 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
2015/11/04 Javascript
jQuery旋转木马式幻灯片轮播特效
2015/12/04 Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
2016/09/04 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
微信小程序  Mustache语法详细介绍
2016/10/27 Javascript
jQuery Ajax File Upload实例源码
2016/12/12 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
浅谈layui里的上传控件问题
2019/09/26 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
解决vue页面刷新,数据丢失的问题
2020/11/24 Vue.js
Python和perl实现批量对目录下电子书文件重命名的代码分享
2014/11/21 Python
Matplotlib 生成不同大小的subplots实例
2018/05/25 Python
Python自动采集微信联系人的实现示例
2020/02/28 Python
EJB与JAVA BEAN的区别
2016/08/29 面试题
工程造价专业大专生求职信
2013/10/06 职场文书
五型班组建设方案
2014/02/10 职场文书
服装促销活动方案
2014/02/23 职场文书
优秀护士演讲稿
2014/04/30 职场文书
新教师培训心得体会
2014/09/02 职场文书
JavaScript的Set数据结构详解
2022/02/18 Javascript
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android