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控制台英汉汉英电子词典
Apr 23 Python
详解Django通用视图中的函数包装
Jul 21 Python
用Python写一个无界面的2048小游戏
May 24 Python
Anaconda多环境多版本python配置操作方法
Sep 12 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
Nov 30 Python
Python实现的自定义多线程多进程类示例
Mar 23 Python
查找python项目依赖并生成requirements.txt的方法
Jul 10 Python
Django中使用Celery的方法示例
Nov 29 Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 Python
使用python matplotlib 画图导入到word中如何保证分辨率
Apr 16 Python
解决python存数据库速度太慢的问题
Apr 23 Python
Python中Numpy和Matplotlib的基本使用指南
Nov 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
PHP的宝库目录--PEAR
2006/10/09 PHP
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
2015/12/24 PHP
PHP实现原比例生成缩略图的方法
2016/02/03 PHP
JavaScript isPrototypeOf和hasOwnProperty使用区别
2010/03/04 Javascript
js 小贴士一星期合集
2010/04/07 Javascript
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
2012/07/20 Javascript
Jquery带搜索框的下拉菜单
2013/05/06 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
2015/03/13 Javascript
JavaScript简单获取系统当前时间完整示例
2016/08/02 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
2017/01/12 Javascript
js实现3d悬浮效果
2017/02/16 Javascript
JS实现图片点击后出现模态框效果
2017/05/03 Javascript
iscroll实现下拉刷新功能
2017/07/18 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
2018/04/03 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
webpack 代码分离优化快速指北
2019/05/18 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
三步搞定:Vue.js调用Android原生操作
2020/09/07 Javascript
浅析Python中signal包的使用
2015/11/13 Python
Python使用lxml模块和Requests模块抓取HTML页面的教程
2016/05/16 Python
简单了解python关系(比较)运算符
2019/07/08 Python
python getpass模块用法及实例详解
2019/10/07 Python
python配置文件写入过程详解
2019/10/19 Python
python topk()函数求最大和最小值实例
2020/04/02 Python
哪种Python框架适合你?简单介绍几种主流Python框架
2020/08/04 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
2021/02/23 Python
css3进行截取替代js的substring
2013/09/02 HTML / CSS
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
几个Linux面试题笔试题
2012/12/01 面试题
广告学专业自荐信范文
2014/02/24 职场文书
小学红领巾广播稿(3篇)
2014/09/13 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
中学生打架检讨书之500字
2019/08/06 职场文书