Сохранение данных 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)