• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python pickle类库介绍(对象序列化和反序列化)

Python pickle类库介绍(对象序列化和反序列化)

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了python pickle,python pickle模块,python pickle.dump,python pickle.load,python pickle下载等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

一、pickle

pickle模块用来实现python对象的序列化和反序列化。通常地pickle将python对象序列化为二进制流或文件。
 
python对象与文件之间的序列化和反序列化:
pickle.dump()
pickle.load()
</div>
如果要实现python对象和字符串间的序列化和反序列化,则使用:
pickle.dumps()
pickle.loads()
</div>
 
可以被序列化的类型有:
* None,True 和 False;
* 整数,浮点数,复数;
* 字符串,字节流,字节数组;
* 包含可pickle对象的tuples,lists,sets和dictionaries;
* 定义在module顶层的函数:
* 定义在module顶层的内置函数;
* 定义在module顶层的类;
* 拥有__dict__()或__setstate__()的自定义类型;
 

注意:对于函数或类的序列化是以名字来识别的,所以需要import相应的module。

二、pickle的运行过程

在大部分情况下,要是的对象picklable,我们不需要额外的代码。默认地pickle将智能地检查类和实例的属性,当一个类实例反序列化的时候,它的__init__()方法通常不被调用。而是首先创建一个未初始化的实例,然后再回复存储的属性。
 

但是可以通过实现下列的方法来修改默认的行为:
object.__getstate__() :默认地序列化对象的__dict__,但是如果你实现了__getstate__(),则__getstate__()函数返回的值将被序列化。
object.__setstate__(state) :如果类型实现了此方法,则在反序列化的时候,此方法用来恢复对象的属性。
object.__getnewargs__() : 如果实例构造的时候(__new__())需要参数,则需要实现此函数。
</div>
注意:如果__getstate__()返回False,则在反序列化的时候__setstate__()则不被调用。

有的时候为了效率,或上面的3个函数不能满足需求时,需要实现__reduce__()函数。

三、实例

import pickle

# An arbitrary collection of objects supported by pickle.
data = {
    'a': [1, 2.0, 3, 4+6j],
    'b': ("character string", b"byte string"),
    'c': set([None, True, False])
}

with open('data.pickle', 'wb') as f:
    # Pickle the 'data' dictionary using the highest protocol available.
    pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)

   
with open('data.pickle', 'rb') as f:
    # The protocol version used is detected automatically, so we do not
    # have to specify it.
    data = pickle.load(f)
    print(str(data))
</div>

四、修改picklable类型的默认行为  

class TextReader:
    """Print and number lines in a text file."""

    def __init__(self, filename):
        self.filename = filename
        self.file = open(filename)
        self.lineno = 0

    def readline(self):
        self.lineno += 1
        line = self.file.readline()
        if not line:
            return None
        if line.endswith('\n'):
            line = line[:-1]
        return "%i: %s" % (self.lineno, line)

    def __getstate__(self):
        # Copy the object's state from self.__dict__ which contains
        # all our instance attributes. Always use the dict.copy()
        # method to avoid modifying the original state.
        state = self.__dict__.copy()
        # Remove the unpicklable entries.
        del state['file']
        return state

    def __setstate__(self, state):
        # Restore instance attributes (i.e., filename and lineno).
        self.__dict__.update(state)
        # Restore the previously opened file's state. To do so, we need to
        # reopen it and read from it until the line count is restored.
        file = open(self.filename)
        for _ in range(self.lineno):
            file.readline()
        # Finally, save the file.
        self.file = file
       
reader = TextReader("hello.txt")
print(reader.readline())
print(reader.readline())
s = pickle.dumps(reader)
#print(s)
new_reader = pickle.loads(s)
print(new_reader.readline())

# the output is
# 1: hello
# 2: how are you
# 3: goodbye
</div>

</div>

您可能想查找下面的文章:

  • 用pickle存储Python的原生对象方法
  • 详解Python之数据序列化(json、pickle、shelve)
  • Python中的数据对象持久化存储模块pickle的使用示例
  • Python pickle模块用法实例分析
  • Python pickle模块用法实例分析
  • Python pickle模块用法实例
  • python持久性管理pickle模块详细介绍
  • Python pickle类库介绍(对象序列化和反序列化)
  • Python 序列化 pickle/cPickle模块使用介绍
  • Python pickle类库介绍(对象序列化和反序列化)

相关文章

  • python复制文件代码实现
  • Python随机生成带特殊字符的密码
  • python中常用的九种预处理方法分享
  • 深入解读Python解析XML的几种方式
  • 讲解Python中for循环下的索引变量的作用域
  • python中json格式数据输出的简单实现方法
  • python使用PyFetion来发送短信的例子
  • Python连接DB2数据库
  • 浅析Python的Django框架中的Memcached
  • Python中使用动态变量名的方法

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
    • Python下的twisted框架入门指引
    • Python StringIO模块实现在内存缓冲区中读写数据
    • Python的Urllib库的基本使用教程
    • kNN算法python实现和简单数字识别的方法
    • Python脚本在Appium库上对移动应用实现自动化测试
    • python批量同步web服务器代码核心程序
    • Python下singleton模式的实现方法
    • Python中使用第三方库xlrd来读取Excel示例
    • 用Python计算三角函数之atan()方法的使用

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有