Python Data Persistence - Pickle Module
A terminologia do Python para serialização e desserialização é pickling e unpickling respectivamente. O módulo pickle na biblioteca Python usa um formato de dados muito específico do Python. Portanto, os aplicativos não-Python podem não ser capazes de desserializar os dados em conserva de maneira adequada. Também é aconselhável não retirar dados de fontes não autenticadas.
Os dados serializados (conservados) podem ser armazenados em uma string de bytes ou em um arquivo binário. Este módulo definedumps() e loads()funções para separar e retirar dados usando cadeia de bytes. Para o processo baseado em arquivo, o módulo temdump() e load() função.
Os protocolos pickle do Python são as convenções usadas na construção e desconstrução de objetos Python de / para dados binários. Atualmente, o módulo pickle define 5 protocolos diferentes, conforme listado abaixo -
Sr. Não. | Nomes e Descrição |
---|---|
1 | Protocol version 0 Protocolo original “legível por humanos” compatível com versões anteriores. |
2 | Protocol version 1 Formato binário antigo também compatível com versões anteriores do Python. |
3 | Protocol version 2 Introduzido no Python 2.3 fornece separação eficiente de classes de novo estilo. |
4 | Protocol version 3 Adicionado em Python 3.0. recomendado quando a compatibilidade com outras versões do Python 3 é necessária. |
5 | Protocol version 4 foi adicionado no Python 3.4. Adiciona suporte para objetos muito grandes |
Exemplo
O módulo pickle consiste na função dumps () que retorna uma representação de string de dados conservados.
from pickle import dump
dct={"name":"Ravi", "age":23, "Gender":"M","marks":75}
dctstring=dumps(dct)
print (dctstring)
Resultado
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.
Exemplo
Use a função carrega (), para retirar a string e obter o objeto de dicionário original.
from pickle import load
dct=loads(dctstring)
print (dct)
Resultado
{'name': 'Ravi', 'age': 23, 'Gender': 'M', 'marks': 75}
Objetos em conserva também podem ser armazenados de forma persistente em um arquivo de disco, usando a função dump () e recuperados usando a função 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()
O módulo pickle também fornece API orientada a objeto para mecanismo de serialização na forma de Pickler e Unpickler Aulas.
Conforme mencionado acima, assim como os objetos embutidos no Python, os objetos de classes definidas pelo usuário também podem ser serializados de forma persistente no arquivo de disco. No programa a seguir, definimos uma classe de usuário com nome e número de celular como seus atributos de instância. Além do construtor __init __ (), a classe sobrescreve o método __str __ () que retorna uma representação de string de seu objeto.
class User:
def __init__(self,name, mob):
self.name=name
self.mobile=mob
def __str__(self):
return ('Name: {} mobile: {} '. format(self.name, self.mobile))
Para selecionar o objeto da classe acima em um arquivo, usamos a classe pickler e seu método dump ().
from pickle import Pickler
user1=User('Rajani', '[email protected]', '1234567890')
file=open('userdata','wb')
Pickler(file).dump(user1)
Pickler(file).dump(user2)
file.close()
Por outro lado, a classe Unpickler tem o método load () para recuperar o objeto serializado da seguinte maneira -
from pickle import Unpickler
file=open('usersdata','rb')
user1=Unpickler(file).load()
print (user1)