python pickle存储、读取大数据量列表、字典数据的方法
作者:要啥名字 发布时间:2021-10-01 11:22:51
先给大家介绍下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存储、读取大数据量列表、字典的数据的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
来源:https://blog.csdn.net/register_2/article/details/80323859
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 笔者之前用R开发评分卡时,需要进行分箱计算woe及iv值,采用的R包是smbinning,它可以自动进行分箱。近期换用python开发, 也
- 摘要:MySQL JDBC抽取到底应该采用什么样的方式,且听小编给你娓娓道来。小编最近在云上的一个迁移项目中被MySQL抽取模式折磨的很惨。
- 本文实例讲述了python基于queue和threading实现多线程下载的方法,分享给大家供大家参考。具体方法如下:主代码如下: &nbs
- About最近在学习vue的过程中,仿照去哪儿网的移动端写了个小项目,旨在实践和巩固基础知识,但是今天发现去哪儿的首页上有一个组件用户体验较
- auto-push-oss Action虽然在 Github 市场有推送 OSS 相关的 Action,但是我还是选择改造我运行了好多年的脚
- 这篇文章主要介绍了python matplotlib拟合直线的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- XSS(跨站脚本攻击)作为一种常见的网络安全漏洞,经常被黑客用来攻击网站,Python 是一种十分流行的编程语言,有着丰富的工具库和模块,可
- 最近开始学Python,想直接通过命令行的方式进行学习。奈何没有Tab补全,操作实在麻烦,网上各种百度后无果(x64系统,x86的可以直接下
- jenkins是什么? Jenkins是一个开
- 本文实例展示了Python生成日历的实现方法。该实例可实现一个月的日历生成5x7的列表,列表里的没个日期为datetime类型,采用pyth
- PyQt5布局控件QFormLayout简介QFormLayout是label-field式的表单布局,顾明思议,就是实现表单方式的布局,表
- 安装python虚拟环境核心目的就是为了复制一个python环境,这样新项目下载的所有包,都会存放在虚拟环境下的python site-pa
- 唉,可怜呀,用了这么久的SQL今天头一次用到外连接,效果不错,方法如下: 使用外联接 仅当至少有一个同属于两表的行符合联接条件时,内联接才返
- 一、前言今天在这边专门整理了一遍文章,和大家一起聊聊如何使用python做PC端自动化!二、环境安装使用python实现来做PC端自动化,前
- 本文实例讲述了Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能。分享给大家供大家参考,具体如下:公司要写一些
- 1.格式化输出 chop 是rtrim()的别名;ltrim() trim()nl2br()将\n转换成<br>print,ec
- Tkinter是python的GUI模块,内含各种窗口控件,利用其中messagbox可以制作各种信息弹出窗口。以下是制作信息提示框的代码:
- 由于画图时plt.title()默认是显示英文,如果我们设置标题为中文,会无法显示,如图:在最前边设置这两条属性即可:plt.rcParam
- 1、前期准备通过 pip 或 easy_install 安装了 pymongo 之后, 就能通过 Python 调教 mongodb 了.接
- 关于asp随机数的相关文章:asp生成一个不重复的随机数字 8个asp生成随机字符的函数 <html> <me