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 socket 超时设置 errno 10054
Jul 01 Python
python实现的重启关机程序实例
Aug 21 Python
Python的Bottle框架中获取制定cookie的教程
Apr 24 Python
python中子类调用父类函数的方法示例
Aug 18 Python
Python SqlAlchemy动态添加数据表字段实例解析
Feb 07 Python
python微元法计算函数曲线长度的方法
Nov 08 Python
Python使用post及get方式提交数据的实例
Jan 24 Python
在Python中居然可以定义两个同名通参数的函数
Jan 31 Python
Python 实现自动导入缺失的库
Oct 29 Python
python使用selenium爬虫知乎的方法示例
Oct 28 Python
python 读取串口数据的示例
Nov 09 Python
Python 键盘事件详解
Nov 11 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
基于mysql的论坛(7)
2006/10/09 PHP
Zend Framework框架Smarty扩展实现方法
2016/03/22 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
2016/09/19 PHP
javascript 跳转代码集合
2009/12/03 Javascript
JavaScript 数组循环引起的思考
2010/01/01 Javascript
ExtJS 设置级联菜单的默认值
2010/06/13 Javascript
如何使用Javascript正则表达式来格式化XML内容
2013/07/04 Javascript
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
2013/12/12 Javascript
js 操作select与option(示例讲解)
2013/12/20 Javascript
使用CamanJS在Web页面上处理图像的技巧
2015/08/18 Javascript
js实现带圆角的两级导航菜单效果代码
2015/08/24 Javascript
详解JavaScript函数
2015/12/01 Javascript
好好了解一下Cookie(强烈推荐)
2016/06/14 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
iview Upload组件多个文件上传的示例代码
2018/09/30 Javascript
js判断浏览器的环境(pc端,移动端,还是微信浏览器)
2020/12/24 Javascript
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
Python实现遍历目录的方法【测试可用】
2017/03/22 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
python 一个figure上显示多个图像的实例
2019/07/08 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
PIL包中Image模块的convert()函数的具体使用
2020/02/26 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
2020/09/21 Python
canvas如何绘制钟表的方法
2017/12/13 HTML / CSS
教育孩子心得体会
2014/01/01 职场文书
高中学生干部学习的自我评价
2014/02/21 职场文书
2014年五一活动策划方案
2014/03/15 职场文书
小学班级口号
2014/06/09 职场文书
2014年宣传部工作总结
2014/11/12 职场文书
2015年计算机教师工作总结
2015/07/22 职场文书
MySQL 视图(View)原理解析
2021/05/19 MySQL