python3 pickle_pickle文件是什么

python3 pickle_pickle文件是什么Python3中pickle模块介绍

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

      Pyhton3中的pickle模块用于对Python对象结构的二进制进行序列化(或pickling)和反序列化(或unpickling)。”pickling”是将Python对象及其所拥有的层次结构转化为一个字节流(byte stream)的过程,而”unpickling”是相反的操作,会将(来自一个binary file或者bytes-like object的)字节流转化回一个对象层次结构(object hierarchy)。

      pickle是Python3的一个标准模块,安装Python3的同时就已经安装了pickle库。

      pickle用于存储Python对象。我们不必一次又一次地构造同一个对象。我们将创建一次对象,然后将其保存到磁盘中,稍后,我们从磁盘加载此对象,而无需再次创建对象。

      pickle在机器学习中最有用。机器学习模型是在非常大的数据集上训练的,训练模型会消耗大量时间。我们只需训练一次模型,然后可以将其保存到本地磁盘中,当我们需要测试我们的模型时,我们可以直接从磁盘加载它,而无需再次训练它。

      pickle模块并不安全:你只应该对你信任的数据进行unpickle操作。在处理不信任数据时,更安全的序列化格式如json可能更为适合(json是一个文本序列化格式,而pickle是一个二进制序列化格式)。

      pickle所使用的数据格式仅可用于Python

      如果我们试图unpickle在不同版本的Python生成的pickled文件,它可能会导致问题。如果你使用特定版本的Python pickled了一个对象,那么你可能无法使用低版本的Python来unpickle它。

      尝试pickle不能被pickled的对象会抛出PicklingError异常,异常发生时,可能有部分字节已经被写入指定文件中。尝试pickle递归层级很深的对象时,可能会超出最大递归层级限制,此时会抛出RecursionError异常。在封存类的实例时,其类体和类数据不会跟着实例一起被pickled,只有实例数据会被pickled

      目前pickle模块可以使用六种不同的协议。协议版本越高,Python解释器就需要越新的版本才能进行unpickle。可通过pickle.HIGHEST_PROTOCOL获取当前python解释器支持的最高协议。要使用特定的协议,需要在调用load/loads/dump/dumps时指定协议版本。如果没有指定协议版本,那么解释器将使用pickle.DEFAULT_PROTOCOL属性中指定的默认版本。

      要序列化某个包含层次结构的对象,只需调用dump或dumps函数即可。同样,要反序列化数据流,可以调用load或loads函数。dump和dumps函数之间的唯一区别是第一个创建一个序列化结果到打开的文件,而第二个把序列化结果到一个字符串。同样的概念也适用于load和loads函数:第一个读取打开的文件以启动unpickling过程,第二个对字符串进行unpickling操作。

      pickle支持pickled/unpickled的对象,包括

      (1).None,True,and False;

      (2).integers,floating-point numbers,complex numbers;

      (3).strings,bytes,bytearrays;

      (4).tuples,lists,sets,and dictionaries containing only picklable objects;

      (5).functions(built-in and user-defined) accessible from the top level of a module(using def,not lambda);

      (6).classes accessible from the top level of a module;

      (7).instances of such classes whose __dict__ or the result of calling __getstate__() is picklable。

      以上内容主要参考:https://docs.python.org/3/library/pickle.html

      以下为测试代码:

import pickle
import sys

def dictionary_dump_load():
    # reference: https://docs.python.org/zh-cn/3/library/pickle.html
    data = {
        'a': [1, 2.0, 3+4j],
        'b': ("character string", b"byte string"),
        'c': {None, True, False}
    }

    with open('data.pickle', 'wb') as f:
        pickle.dump(data, f)

    with open('data.pickle', 'rb') as f:
        data2 = pickle.load(f)

    print("dictionary data:", data2) # dictionary data: {'a': [1, 2.0, (3+4j)], 'b': ('character string', b'byte string'), 'c': {False, True, None}}

class example_class:
    # reference: https://realpython.com/python-pickle-module/
    a_number = 35
    a_string = "hey"
    a_list = [1, 2, 3]
    a_dict = {"first": "a", "second": 2, "third": [1, 2, 3]}
    a_tuple = (22, 23)

def donot_support_lambda():
    square = lambda x : x * x # dill module support lambda serializes
    my_pickle = pickle.dumps(square) # AttributeError: Can't pickle local object 'donot_support_lamda.<locals>.<lambda>'

def func_add(a, b):
    return (a+b)

def main():
    dictionary_dump_load()

    my_object = example_class()
    my_pickled_object = pickle.dumps(my_object)  # Pickling the object
    print(f"pickled object: {my_pickled_object}") # pickled object: b'\x80\x04\x95!\x00\x00\x00\x00\x00\x00\x00\x8c\x08__main__\x94\x8c\rexample_class\x94\x93\x94)\x81\x94.'

    my_object.a_dict = None

    my_unpickled_object = pickle.loads(my_pickled_object)  # Unpickling the object
    print(f"unpickled object: {my_unpickled_object.a_dict}") # unpickled object: {'first': 'a', 'second': 2, 'third': [1, 2, 3]}

    # 可通过pickle.HIGHEST_PROTOCOL获取python解释器支持的最高协议,通过pickle.DEFAULT_PROTOCOL获取python解释器支持的默认协议
    print(f"python version: {sys.version}, the highest protocol supported by the interpreter: {pickle.HIGHEST_PROTOCOL}") # python version: 3.10.4 (main, Mar 31 2022, 08:41:55) [GCC 7.5.0], the highest protocol supported by the interpreter: 5
    print(f"python version: {sys.version}, default version: { pickle.DEFAULT_PROTOCOL}") # python version: 3.10.4 (main, Mar 31 2022, 08:41:55) [GCC 7.5.0], default version: 4

    #donot_support_lambda()

    # Python函数和类都可以序列化和反序列化
    with open('data2.pickle', 'wb') as f:
        pickle.dump(func_add, f) # dump function

    with open('data2.pickle', 'rb') as f:
        add = pickle.load(f)

    print("2+3=", add(2, 3)) # 2+3= 5

    print("test finish")

if __name__ == '__main__':
    main()

Jetbrains全家桶1年46,售后保障稳定

      GitHubhttps://github.com/fengbingchun/Python_Test

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234444.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 分子模拟软件amber_使用Amber创建小分子与蛋白质复合蛋白的坐标和拓扑文件

    分子模拟软件amber_使用Amber创建小分子与蛋白质复合蛋白的坐标和拓扑文件复合蛋白amber坐标和拓扑文件的创建作者:朱宁来源:大科研小分享前言分子动力学(MolecularDynamics,MD)是一门结合物理,数学和化学的综合技术。目前主流分子动力学软件有NAMD、GROMACS、AMBER等。AMBER分子动力学程序包是由加州圣弗兰西斯科大学(UCSF)的PeterAKollman和其同事编写的,程序很全,大约包含60多个程序,相互协调工…

  • ELF文件格式简介「建议收藏」

    ELF文件格式简介「建议收藏」  简单了解下ELF文件的格式。1简介  可执行与可链接格式(ExecutableandLinkableFormat,ELF),常被称为ELF格式,是一种用于可执行文件、目标代码、共享库和核心转储(coredump)的标准文件格式,一般用于类Unix系统,比如Linux,Macox等。ELF格式灵活性高、可扩展,并且跨平台。比如它支持不同的字节序和地址范围,所以它不会不兼容某一特别的CPU或指令架构。这也使得ELF格式能够被运行于众多不同平台的各种操作系统所广泛采纳。  E.

    2022年10月25日
  • Java中HashMap遍历几种方式[通俗易懂]

    Java中HashMap遍历几种方式[通俗易懂]目录一、使用迭代器二、foreach遍历一、使用迭代器第一种:  Mapmap=newHashMap();  Iteratoriter=map.entrySet().iterator();  while(iter.hasNext()){  Map.Entryentry=(Map.Entry)iter.next();  Objectkey…

  • Smartphone 2.0 = Phone + Service

    Smartphone 2.0 = Phone + Service

  • Windows如何删除MySql服务

    Windows如何删除MySql服务在CMD里输入一跳命令就可以将服务删除:scdeletemysql//这里的mysql是你要删除的服务名

  • 2021vue经典面试题_vue面试题大全

    2021vue经典面试题_vue面试题大全面试题(2020)Vue面试题汇总博客说明文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!1、对于MVVM的理解MVVM是Model-View-ViewModel的缩写。Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑。View代表UI组件,它负责将数据模型转化成UI展现出来。ViewModel监听模型数据的改变和控制视图行为、处理用户交互,简单理解就是一个同步View和Model的对

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号