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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM