(摘抄)python之——pickle文件骚操作

1 篇文章 0 订阅
1 篇文章 0 订阅

这两天微信推送一篇文章看了标题挺有兴趣,打开-收藏-关闭一顿三连操作,到了周末懒癌发作想着睡觉一直搁着,最后还是留下了没技术的泪水默默打开看了,越看越觉得有意思,尤其是提到了关于文件对象如何pickle,这里也只讲如何pickle文件,这是本人最关心的,要是有兴趣的同志可以自行看完整文章。

以下都是摘抄自原文章,因为觉的太棒了得分享出来!

原推送文章

  • 阅读之前默认读者是知道什么是pickle的,在此不多介绍。
  • 其实操作很简单,但是一直没有这种思路,之前的进程间共享复杂自定义对象的问题导致项目暂停了好久没进展最后换了其他方法。

不废话了直接上代码:

class Foo(object):

    def __init__(self, value, filename):
        self.value = value
        self.file = file(filename, 'w')

    def __getstate__(self):
        """Return state values to be pickled."""
        f = self.file
        return (self.value, f.name, f.tell())
        
    def __setstate__(self, state):
        """Restore state from the unpickled state values."""
        self.value, name, position = state
        f = file(name, 'w')
        f.seek(position)
        self.logfile = f
        
  • __getstate____setstate__是用来进行pickle/unpickle的两个默认对象调用方法
  • Python不支持file对象或者说类BinaryIO对象这种带状态的文件对象进行直接pickle化的
  • __getstate__对象方法中做了三件事
    • 返回的第一个值value,这里value一般是built-in类型,Python默认支持pickle化的类型,没有好说的
    • 返回file对象name属性值,也就是文件的路径,当然这个文件路径取决于在进行open时用的是相对路径还是绝对路径
    • 返回文件游标指向位置,文件对象方法tell()可以获取当前文件游标指向的位置。
  • __setstate__对象方法中做了对应的三件事
    • value值重新赋值给value属性
    • 先根据__getstate__返回的元组第二个元素,也就是文件路径,通过file打开,当然,要用open也可以,随便开发者,重点是达到目的。
    • 打开文件得到文件对象了,那么接着就是需要知道之前文件的状态,__getstate__返回的元组第三个元素就是文件在pickle之前的文件游标指向,通过文件对象的seek() 方法,告诉文件游标应该指向哪里
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值