python--使用pickle序列化对象

pickle序列化对象

如果希望透明地存储 Python 对象,而不丢失其身份和类型等信息,则需要某种形式的对象序列化:它是一个将任意复杂的对象转成对象的文本或二进制表示的过程。

同样,必须能够将对象经过序列化后的形式恢复到原有的对象。在 Python 中,这种序列化过程称为 pickle,

可以将对象 pickle 成字符串、磁盘上的文件或者任何类似于文件的对象,也可以将这些字符串、文件或任何类似于文件的对象 unpickle 成原来的对象

代码实例

import pickle
class MyPickle(object):

    def __init__(self,file_name):
        self.file_name = file_name

    def dump(self,obj):
        """
        序列化对象
        :param obj:
        :return:
        """
        with open(self.file_name,‘ab‘) as f:
            pickle.dump(obj, f)
            print(‘dump data‘,obj.__dict__)

    def loaditer(self):
        """
        迭代反序列化对象
        :return:
        """
        f = open(self.file_name, ‘rb‘)
        while True:
            try:
                obj = pickle.load(f)
                yield obj
            except EOFError:
                print(‘EOFError‘)
                f.close()
                print(f.closed)
                break

class Person:
    def __init__(self,n,a):
        self.name=n
        self.age=a
    def show(self):
        print(self.name+"_"+str(self.age) )

aa = Person("aGood", 2)
bb = Person("bGood",3)
cc = Person("cGood",4)

p = MyPickle(‘c.txt‘)
p.dump(aa)
p.dump(bb)
p.dump(cc)

iter_obj = p.loaditer()
while True:
    try:
        print(next(iter_obj).__dict__)
    except StopIteration:
        print(‘stop‘)
        break

输出结果

dump data {‘name‘: ‘aGood‘, ‘age‘: 2}
dump data {‘name‘: ‘bGood‘, ‘age‘: 3}
dump data {‘name‘: ‘cGood‘, ‘age‘: 4}
{‘name‘: ‘aGood‘, ‘age‘: 2}
{‘name‘: ‘bGood‘, ‘age‘: 3}
{‘name‘: ‘cGood‘, ‘age‘: 4}
EOFError
True
stop

  

原文地址:https://www.cnblogs.com/xiao-apple36/p/9212264.html

时间: 2024-11-10 07:47:18

python--使用pickle序列化对象的相关文章

Python之pickle序列化

内存中有一个数据结构,你希望将它保存下来,重用,或者发送给其他人.你会怎么做?这取决于你想要怎么保存.怎么重用.发送给谁.很多游戏允许你在退出时保存进度,然后你再次启动的时候回到上次退出的地方.(实际上,很多非游戏程序也会这么干.)在这个情况下,一个捕获了当前进度的数据结构需要在你退出的时候保存到磁盘上,接着你重新启动的时候从磁盘上加载进来. Python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过

【Python之旅】第三篇(二):Pickle序列化

说明:关于Pickle的说明 作如下说明: 序列化的概念很简单.内存里面有一个数据结构,你希望将它保存下来,重用,或者发送给其他人.你会怎么做?嗯, 这取决于你想要怎么保存,怎么重用,发送给谁.很多游戏允许你在退出的时候保存进度,然后你再次启动的时候回到上次退出的地方.(实际上, 很多非游戏程序也会这么干.) 在这个情况下, 一个捕获了当前进度的数据结构需要在你退出的时候保存到磁盘上,接着在你重新启动的时候从磁盘上加载进来. 什么东西能用pickle模块存储? –所有Python支持的 原生类型

python类库32[序列化和反序列化之pickle]

一 pickle pickle模块用来实现python对象的序列化和反序列化.通常地pickle将python对象序列化为二进制流或文件. python对象与文件之间的序列化和反序列化: pickle.dump() pickle.load() 如果要实现python对象和字符串间的序列化和反序列化,则使用: pickle.dumps() pickle.loads() 可以被序列化的类型有: * None,True 和 False; * 整数,浮点数,复数; * 字符串,字节流,字节数组; * 包

python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)

1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,在python中.一个.py文件就称为一个模块(Module) 使用模块的好处: 提高了代码的可维护性. 其次,编写代码不必从零开始.当一个模块编写完毕,就可以被其他地方引用.我们编写程序的时候也经常引用其他模块,包括python的内置的模块和第三方模块. 包(package

python 跨语言数据交互,json,pickle(序列化).

Python中用于序列化的两个模块 json     用于[字符串]和 [python基本数据类型] 间进行转换 pickle   用于[python特有的类型] 和 [python基本数据类型]间进行转换 Json模块提供了四个功能:dumps.dump.loads.load pickle模块提供了四个功能:dumps.dump.loads.load json.dudmp ("[11,22]",open('db.txt','w'))   #转换成字符串再保存到该文件. json.lo

Python之路-json和pickle序列化/反序列化

首先引入json模块 序列化:使用json的dumps方法 反序列化:使用json的loads方法 过程:在json序列化后就可以将序列化的数据类型写入文件,然后在从文件中读出该数据类型,然后在进行反序列化 json对象中的其他的方法:dump(info,f)>>>其中Info是需要序列化的数据,f是一个文件句柄:load(f)>>>使用这两个方法不要在对文件进行读写 pickle和json使用方法类似,只是名字不同且pickle可以处理复杂数据类型而json不能(pi

Python pickle序列化后写入文件,并实现曾加内容

pickle序列化 # _*_coding:utf-8_*_ import pickle import os list_ec = [] while True: if os.path.isfile("course_list"): # 判断文件夹是否存在 with open("course_list", "rb") as f: list_aa = pickle.load(f) f.close() # print(list_aa) # 可以打开,每次读

Python常用模块——序列化pickle&json模块

Python常用模块--序列化pickle&json模块 一.什么叫序列化? 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接收bytes. 二.为什么要序列化? 你打游戏过程中,打累了,停下来,关掉游戏,想过2天再玩.2天之后,游戏从你上次停止的地方继续运行,你上次游戏的进度肯定保存在硬盘上了,是以何种形式呢?游戏过程中产生的很多临时数据是不规律的,可能在你关掉游戏时正好有10个列表,3个嵌套字典的数据集合在内存里,需要存下来,你如何

Python的json and pickle序列化

json序列化和json反序列化 #!/usr/bin/env python3 # -*- coding: utf-8 -*- __author__ = '人生入戏' import json a = { "name":"test", "age":"20", } #json序列化 with open("json_test","w",encoding="utf-8") a