pickle 序列化模块

为什么需要序列化

  • 便于存储。序列化过程将文本信息转变为二进制数据流。

  • 便于传输。当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。

序列化

pickle.dump()

pickle.dump(obj, file, protocol=None,*,fix_imports=True)
  • 序列化后的对象obj以二进制形式写入文件file中,进行保存。它的功能等同于 Pickler(file, protocol).dump(obj)。
  • 数file,有一点需要注意,必须是以二进制的形式进行操作(写入)

pickle.dumps()

pickle.dumps(obj, protocol=None,*,fix_imports=True)
  • pickle.dumps()方法跟pickle.dump()方法的区别在于,pickle.dumps()方法不需要写入文件中,它是直接返回一个序列化的bytes对象。

Pickler(file, protocol).dump(obj)

pickle.Pickler(file, protocol=None,*,fix_imports=True)

实现的功能跟 pickle.dump()是一样的

反序列化

pickle.load()

pickle.load(file, *,fix_imports=True, encoding=”ASCII”. errors=”strict”)
  • 将序列化的对象从文件file中读取出来。它的功能等同于 Unpickler(file).load()。

pickle.loads()

pickle.loads(bytes_object, *,fix_imports=True, encoding=”ASCII”. errors=”strict”)
  • 直接从bytes对象中读取序列化的信息,而非从文件中读取。

unpickler(file).load()

pickle.Unpickler(file, *,fix_imports=True, encoding="ASCII". errors="strict")
  • 功能跟 pickle.load() 是一样的

实例


    #coding:utf-8  
    __author__ = 'MsLili'  
    #pickle模块主要函数的应用举例  
    import pickle  
    dataList = [[1, 1, 'yes'],  
                [1, 1, 'yes'],  
                [1, 0, 'no'],  
                [0, 1, 'no'],  
                [0, 1, 'no']]  
    dataDic = { 0: [1, 2, 3, 4],  
                1: ('a', 'b'),  
                2: {'c':'yes','d':'no'}}  
      
    #使用dump()将数据序列化到文件中  
    fw = open('dataFile.txt','wb')  
    # Pickle the list using the highest protocol available.  
    pickle.dump(dataList, fw, -1)  
    # Pickle dictionary using protocol 0.  
    pickle.dump(dataDic, fw)  
    fw.close()  
      
    #使用load()将数据从文件中序列化读出  
    fr = open('dataFile.txt','rb')  
    data1 = pickle.load(fr)  
    print(data1)  
    data2 = pickle.load(fr)  
    print(data2)  
    fr.close()  
      
    #使用dumps()和loads()举例  
    p = pickle.dumps(dataList)  
    print( pickle.loads(p) )  
    p = pickle.dumps(dataDic)  
    print( pickle.loads(p) )  

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×