python-pickle模块理解

为啥叫pickle


pickle作名词有泡菜、腌菜的意思,作动词是“腌渍”、“酸洗”、“破坏”。在python中pickle的对象是当前环境的任何obj。

简单来说就是现在程序运行一半了,可能有list,有dictionary,有各种已经被赋值的变量。现在我如果想把这些变量打包存下来,以后再读取,或者是给其他程序读取这些变量的值,这时候就可以用pickle.dump()把这些对象转化成二进制的文本存到一个文件里。


pickle.dump()

存储过程叫做pickling(序列化),该过程中Python对象→字节流,形象一点就是把一个个Python对象“腌”一下,分解成二进制流存起来。用的方法就是pickle.dump(),dump就是“倾倒”、“临时堆积处”,很形象。

用法:

pickle.dump(obj, file, [,protocol])
  • obj:要序列化的Python对象
  • file:要存的文件对象(是文件对象不是文件路径,所以需要先用open()打开)
  • protocol:序列化使用的协议。如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。这里有个坑,就是之后读取的时候Python2.x和3.x不太一样,存的时候无所谓。

例子:

import pickle
dataList = [[1, 1, 'yes'],
            [1, 1, 'yes'],
            [1, 0, 'no'],
            [0, 1, 'no'],
            [0, 1, 'no']]
            
# dump存储目标必须是文件对象,而不能是文件路径
fw = open('dataFile.txt','wb')
# Pickle the list using the highest protocol available.
pickle.dump(dataList, fw, -1)
fw.close()

pickle.load()

读取的过程就是unpickling(反序列化),根据二进制文件重建Python对象,获取数据。

用法:

version = platform.python_version_tuple()
    if version[0] == '2':
        return  pickle.load(f)
    elif version[0] == '3':
    	# 需要使用encoding='latin1'
    	# 来取消拾取由python 2处理的numpy数组和date time、日期和时间实例。 
        return  pickle.load(f, encoding='latin1')
    raise ValueError("invalid python version: {}".format(version))
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值