Сохранение данных Python - модуль рассола

Терминология Python для сериализации и десериализации - соответственно «травление» и «распаковка». Модуль pickle в библиотеке Python использует очень специфичный для Python формат данных. Следовательно, приложения, отличные от Python, могут быть не в состоянии правильно десериализовать консервированные данные. Также не рекомендуется извлекать данные из неаутентифицированного источника.

Сериализованные (маринованные) данные могут храниться в байтовой строке или двоичном файле. Этот модуль определяетdumps() и loads()функции для сбора и извлечения данных с помощью байтовой строки. Для файлового процесса в модуле естьdump() и load() функция.

Протоколы pickle Python - это соглашения, используемые при построении и деконструкции объектов Python в / из двоичных данных. В настоящее время модуль pickle определяет 5 различных протоколов, перечисленных ниже -

Sr.No. Имена и описание
1

Protocol version 0

Оригинальный «удобочитаемый» протокол обратно совместим с более ранними версиями.

2

Protocol version 1

Старый двоичный формат также совместим с более ранними версиями Python.

3

Protocol version 2

Представленный в Python 2.3 обеспечивает эффективное использование классов нового стиля.

4

Protocol version 3

Добавлено в Python 3.0. рекомендуется, когда требуется совместимость с другими версиями Python 3.

5

Protocol version 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.

пример

Используйте функцию load (), чтобы распаковать строку и получить исходный объект словаря.

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 также предоставляет объектно-ориентированный API для механизма сериализации в виде Pickler и Unpickler классы.

Как упоминалось выше, как и встроенные объекты в 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', '[email protected]', '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)