Сохранение/сериализация классов Python в документ YAML
Можно определить свои собственные теги для документа YAML для конкретного приложения. Самый простой способ сделать это — определить подкласс yaml.YAMLObject . Yaml.YAMLObject использует магию метакласса для регистрации конструктора, который преобразует узел YAML в экземпляр класса, и представителя, который сериализует экземпляр класса в узел YAML.
import yaml # класс какого то приложения class Monster(yaml.YAMLObject): # определяем собственный YAML тег yaml_tag = '!Monster' def __init__(self, name, hp, ac, attacks): self.name = name self.hp = hp self.ac = ac self.attacks = attacks def __repr__(self): return (f"self.__class__.__name__>(name=self.name>," f" hp=self.hp>, ac=self.ac>, attacks=self.attacks>)") # создаем объект класса Monster() monster1 = Monster(name='Spider', hp=[2, 6], ac=16, attacks=['BITE', 'HURT']) # сохраняем экземпляр `Monster()` в YAML yaml_obj = yaml.dump(monster1) # смотрим print(yaml_obj) # !Monster # ac: 16 # attacks: # - BITE # - HURT # hp: # - 2 # - 6 # name: Spider # Десериализация YAML в новый экземпляр класса monster2 = yaml.load(yaml_obj, Loader=yaml.Loader) # объект monster2 print(monster2) # Monster(name=Spider, hp=[2, 6], ac=16, attacks=['BITE', 'HURT']) # объект monster1 print(monster1) # Monster(name=Spider, hp=[2, 6], ac=16, attacks=['BITE', 'HURT'])
Более подробнее о функции yaml.dump() и ее параметрах смотрите в разделе «Запись/сериализация различных типов Python в файл YAML»
Так же читайте про безопасную загрузку объектов Python из документа YAML, полученного из ненадежного источника.
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Загрузка/чтение документа YAML
- Загрузка нескольких документов YAML
- Загрузка экземпляров классов Python из YAML
- Сохранение/сериализация различных типов Python в файл YAML
- Сохранение классов Python в документ YAML
- Синтаксис документа YAML для Python
Сохранение объектов в файл — Модуль pickle Python
20 января 2014 г.
Archy
Просмотров: 25215
RSS
1
pickle, pickle python, объекты в файл

Сохранить объекты в файл и в дальнейшем восстановить объекты из файла позволяют модули pickle и shelve. Модуль pickle предоставляет следующие функции:
dump(, [, ]) — производит сериализацию объекта и записывает данные в указанный файл. В параметре указывается файловый объект, открытый для записи. Ниже продемонстрирован способ сохранения объекта в файл.
>>> import pickle >>> f = open(r'file.txt', 'wb') >>> obj = ["Строка", (2, 3)] >>> pickle.dump(obj, f) >>> f.close()
load() — читает сохраненные данные из файла и преобразует их в объект. В параметре указывается файловой объект, открытый для чтения. Пример восстановления объекта из файла.
>>> f = open(r'file.txt', 'rb') >>> obj = pickle.load(f) >>> obj ['\xd0\xa1\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0', (2, 3)] >>> f.close()
Любой бизнес необходимо развивать, а для развития все средства хороши. Рекламная полиграфия от http://konus-u.com.ua/ поможет сделать вашу фирму узнаваемой. Чтобы быть у ваших клиентов каждый день под рукой можно напечатать фирменные блокноты которые будут на виду каждый день как напоминание о вашей продукции.
В один файл можно сохранить сразу несколько объектов, последовательно вызывая функцию dump(). Пример сохранения нескольких объектов приведен в листинге ниже.
>>> obj1 = ["Строка", (2, 3)] >>> obj2 = (5, 6) >>> f = open(r'file.txt', 'wb') >>> pickle.dump(obj1, f) >>> pickle.dump(obj2, f) >>> f.close()
Для восстановления объектов нужно несколько раз вызвать функцию load()
>>> f = open(r'file.txt', 'rb') >>> obj1 = pickle.load(f) >>> obj2 = pickle.load(f) >>> obj1, obj2 (['\xd0\xa1\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0', (2, 3)], (5, 6)) >>> f.close()
Модуль pickle позволяет также преобразовать объект в строку и восстановить объект из строки. Для этого предназначены следующие функции:
dumps(, [, ]) — производит сериализацию объекта и возвращает строку специального формата. Формат этой строки зависит от указанного протокола (число от 0 до 2). В качестве примера выведем результат преобразования в различных протоколах.
>>> obj = ["Строка", (2, 3)] >>> pickle.dumps(obj) "(lp0\nS'\\xd0\\xa1\\xd1\\x82\\xd1\\x80\\xd0\\xbe\\xd0\\xba\\xd0\\xb0'\np1\na(I2\nI3\ntp2\na." >>> pickle.dumps(obj, 0) # Протокол 0 "(lp0\nS'\\xd0\\xa1\\xd1\\x82\\xd1\\x80\\xd0\\xbe\\xd0\\xba\\xd0\\xb0'\np1\na(I2\nI3\ntp2\na." >>> pickle.dumps(obj, 1) # Протокол 0 ']q\x00(U\x0c\xd0\xa1\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0q\x01(K\x02K\x03tq\x02e.' >>> pickle.dumps(obj, 2) # Протокол 2 '\x80\x02]q\x00(U\x0c\xd0\xa1\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0q\x01K\x02K\x03\x86q\x02e.'
Как записать объект класса в файл?

Записать объект класса в txt файл
Есть простой класс, надо объект данного класса записать в txt файл, а также создать объекта класса.
как записать данные в таблицу через объект класса
Здравствуйте пишу курсовой проект коммунальные услуги мне надо записать данные в таблицу через.
Как записать объект в файл?
как все данные из объекта записать в файл, без использования дженериков (for myObject in List), у.
Как объект записать в файл?
Подскажите пожалуста как объект abbonent записать в файл #include "stdafx.h".
55 / 55 / 16
Регистрация: 25.03.2013
Сообщений: 178
Apiaceae, я так понял тебе нужно просто сохранить объект в файл. Если это так то используй модуль pickle http://pep8.ru/doc/tutorial-2.6/8.html. А если сохранять все поля объекта, то добавь новый метод, где будет использоваться print.
Добавлено через 31 минуту
Насчет принта я погорячился конечно Но можно так:
Кликните здесь для просмотра всего текста
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
import codecs class Token(object): def __init__(self, token, type): self.token = token self.type = type def save(self): return ';\n'.format(token=self.token, type=self.type) def main(): word1 = 'word1' type1 = 'type1' word2 = 'word2' type2 = 'type1' tokens = [] tokens.append(Token(word1, type1)) tokens.append(Token(word2, type2)) with codecs.open("tokens.txt", 'w') as file_out: for el in tokens: file_out.write(el.save()) if __name__ == "__main__": main()
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Как передать объект класса в другой файл?
Здравствуйте, подскажите, как правильно передать объект класса в функцию в другом файле. Хочу.
Как сохранить именно этот массив(объект класса) в файл?
Дали задание. Придумать, как сохранить, а потом загрузить в(из) файла данный массив (а точнее.

Как записать в файл Определенные поля класса?
Есть некая коллекция сущностей, и мне нужно записывать в файл некоторые поля сущности (Которые.
Как записать объект(или хотя бы его поля ) в файл в бинарном виде и считать оттуда?
В txt файлик коллекцию обьектов записать необходимо, и считать потом оттуда.

Записать данные из файла в объект класса
#include "stdafx.h" #include <iostream> #include <fstream> #include <typeinfo.h> using.
Нужно записать объект класса TColor
Помогите пожалуйста решить задачу: нужно каким то образом записать цвет из ColorDialog1->Color в.
Как сохранить экземпляр класса в файл?
Я хочу сохранить A в какой-нибудь файл чтобы при загрузке он автоматически стал объектом. Как это сделать, и загрузить его потом из этого файла?
Отслеживать
Тимон Яблоков
задан 21 мар 2020 в 10:47
Тимон Яблоков Тимон Яблоков
421 3 3 серебряных знака 18 18 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Для этого вам надо в классе определить магические методы __setstate__ и __getstate__ , которые используются модулем pickle для сериализации и десериализации объектов. Пример:
import pickle class MyClass: def __init__(self, param1, param2, *args): self.param1 = param1 # Какие-то переменные экземпляра класса self.param2 = param2 self.args = args def __str__(self) -> str: # Для наглядности print'а return "I am <>\nMy param1 is <>\nParam2 is <>\nargs is <>".format( self.__class__, self.param1, self.param2, self.args ) def __getstate__(self) -> dict: # Как мы будем "сохранять" класс state = <> state["param1"] = self.param1 state["param2"] = self.param2 state["args"] = self.args return state def __setstate__(self, state: dict): # Как мы будем восстанавливать класс из байтов self.param1 = state["param1"] self.param2 = state["param2"] self.args = state["args"] a = MyClass("val1", 42, "test", "yee") print(a, end="\n========\n") # Выведет информацию о классе serialized = pickle.dumps(a) # Сериализуем print(serialized, end="\n========\n") # Выведет какие-то байты b = pickle.loads(serialized) # Восстанавливаем экземпляр класса из байтов print(b) # Смотрим, что восстановилось
Для записи в файл:
with open("file.pkl", "wb") as fp: pickle.dump(a, fp)
Для восстановления класса из файла:
with open("file.pkl", "rb") as fp: a = pickle.load(fp)
