Python数据持久化 Pickle模块

Python数据持久化 Pickle模块

Python的序列化和反序列化的术语分别是pickling和unpickling。在Python库中的pickle模块,使用了非常特殊的Python数据格式。因此,非Python应用程序可能无法正确反序列化腌制的数据。我们也建议不要从未经认证的源头解开pickle数据。

序列化(pickled)的数据可以存储在一个字节字符串或二进制文件中。本模块定义了 dumps()load() 函数,以使用字节串来提取和解压数据。对于基于文件的处理,该模块有 dump()load() 函数。

Python的pickle协议是在构造和解构Python对象到/从二进制数据时使用的约定。目前,pickle模块定义了5个不同的协议,如下表所示

编号:Sr.No. 名称和描述
1 协议版本0 原始的 “人类可读 “协议,向后兼容早期版本。
2 协议版本1 旧的二进制格式,也与早期版本的Python兼容。
3 协议版本2Python 2.3中引入,提供了对新式类的有效提取。
4 协议版本3Python 3.0中加入。当需要与其他Python 3版本兼容时,推荐使用。
5 协议版本4 在Python 3.4中加入。它增加了对非常大的对象的支持

例子

pickle模块由dumps()函数组成,该函数返回一个腌制数据的字符串表示。

from pickle import dump
dct={"name":"Ravi", "age":23, "Gender":"M","marks":75}
dctstring=dumps(dct)
print (dctstring)

输出

b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00Raviq\x02X\x03\x00\x00\x00ageq\x03K\x17X\x06\x00\x00\x00Genderq\x04X\x01\x00\x00\x00Mq\x05X\x05\x00\x00\x00marksq\x06KKu.

例子

使用 loads() 函数,解开字符串并获得原始字典对象。

from pickle import load
dct=loads(dctstring)
print (dct)

输出

{'name': 'Ravi', 'age': 23, 'Gender': 'M', 'marks': 75}

腌制对象也可以通过dump()函数持久性地存储在磁盘文件中,并通过load()函数进行检索。

import pickle
f=open("data.txt","wb")
dct={"name":"Ravi", "age":23, "Gender":"M","marks":75}
pickle.dump(dct,f)
f.close()

#to read
import pickle
f=open("data.txt","rb")
d=pickle.load(f)
print (d)
f.close()

pickle模块还以 PicklerUnpickler 类的形式提供了面向对象的序列化机制的API。

如上所述,就像Python中的内置对象一样,用户定义的类的对象也可以在磁盘文件中持久地序列化。在下面的程序中,我们定义了一个 User 类,名字和手机号码是其实例属性。除了 init() 构造函数外,该类还覆盖了 str() 方法,该方法返回其对象的字符串表示。

class User:
   def __init__(self,name, mob):
      self.name=name
      self.mobile=mob
   def __str__(self):
return ('Name: {} mobile: {} '. format(self.name, self.mobile))

为了在文件中提取上述类的对象,我们使用pickler类和它的dump()方法。

from pickle import Pickler
user1=User('Rajani', 'raj@gmail.com', '1234567890')
file=open('userdata','wb')
Pickler(file).dump(user1)
Pickler(file).dump(user2)
file.close()

相反,Unpickler类有load()方法来检索序列化的对象,如下所示

from pickle import Unpickler
file=open('usersdata','rb')
user1=Unpickler(file).load()
print (user1)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程