Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PHP, Perl, Python Новый топик    Ответить
 Python: Сериализация объектов в текстовом формате  [new]
AlekseySQL_2
Member [заблокирован]

Откуда:
Сообщений: 17
Во время выполнения кода (который "крутится" 24/7) при появлении ошибки я решил сохранять текущие объекты в файлы, чтобы потом разобраться с причинами появления ошибки. И тут появились сложности:
1. С одной стороны лог должен быть в текстовом формате, чтобы я мог глазками, раскрывая с помощью "плюсиков", просмотреть значения полей объекта. Поэтому pickle как бы не очень подходит.
2. С другой стороны текстовый формат json накладывает на код сохраняемых объектов ряд ограничений (Бизли "Python подробный справочник", стр 699):
а) tuple при сериализации / десериализации превращается в list.
б) что происходит с set- вообще не понятно.
в) ключи у dict должны иметь ТОЛЬКО тип строка / число (стр. 700, аргумент skipkeys).

Поискал в инете и не нашел каких- то законченных библиотек, которые полностью снимают ограничения json (возможно с помощью сохранения в json метаданных о "проблемных" полях) и предлагают универсальный способ сериализации / десериализации в текстовом виде. Сами наверно понимаете: не хочется вечно помнить о каких- то ограничениях только из- за потенциальной возможности сохранения дампа работы.

Можете посоветовать подобные решения?
11 фев 19, 13:04    [21806300]     Ответить | Цитировать Сообщить модератору
 Re: Python: Сериализация объектов в текстовом формате  [new]
Лысый дядька
Member

Откуда:
Сообщений: 299
AlekseySQL_2
и предлагают универсальный способ сериализации / десериализации в текстовом виде.


Вы их не нашли, потому что их нет. Их нет, потому что питон - динамический язык, у любого объекта в ходе выполнения программы могут появлять и исчезать атрибуты-функции и атрибуты-классы, которые в текстовом виде представить нельзя потому, что питон компилируется в байт-код, и если функция/класс/... загружена из байт-кода, то её исходника вы не получите.

Я вполне ответил на ваш вопрос?
11 фев 19, 13:24    [21806329]     Ответить | Цитировать Сообщить модератору
 Re: Python: Сериализация объектов в текстовом формате  [new]
AlekseySQL_2
Member [заблокирован]

Откуда:
Сообщений: 17
Кстати, не нашел ограничений по xml и в тоже время не нашел утверждений, что он все "пережевывает" (что было бы разумно указать, если несколько страниц выше при рассмотрении json на этом акцентировалось внимание).

Есть у xml ограничения? Если да, то какие?
11 фев 19, 14:23    [21806435]     Ответить | Цитировать Сообщить модератору
 Re: Python: Сериализация объектов в текстовом формате  [new]
Лысый дядька
Member

Откуда:
Сообщений: 299
Итак, Алексей, мы остановились на том, что вы хотите получать сериализацию / десериализацию питоних объектов в текстовом виде (это я вас цитирую). Прошу дать свои соображения на счет того, как вы представляете себе сериализовацию в текст динамически созданной функции.
11 фев 19, 14:38    [21806452]     Ответить | Цитировать Сообщить модератору
 Re: Python: Сериализация объектов в текстовом формате  [new]
vkle
Member

Откуда: Самара
Сообщений: 14460
AlekseySQL_2
Почему вы закрываете мои темы, а меня баните?
Потому что Вы хамить изволите. Возможно, Вы этого не осознаете.

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

AlekseySQL_2
Есть у xml ограничения? Если да, то какие?
Да те же бинарные данные в чистом виде хранить не умеет.
11 фев 19, 14:56    [21806477]     Ответить | Цитировать Сообщить модератору
 Re: Python: Сериализация объектов в текстовом формате  [new]
AlekseySQL_2
Member [заблокирован]

Откуда:
Сообщений: 17
vkle
AlekseySQL_2
Почему вы закрываете мои темы, а меня баните?
Потому что Вы хамить изволите. Возможно, Вы этого не осознаете.


Я это отлично осознаю. Но это единственная возможность, которая у меня остается в силу того, что вы не выполняете свои прямые обязанности. Например, в этой теме вы легко можете вычистить всю ту грязь, которую этот товарищ успел натащить. Неужели сделаете свою работу? Не верю!

vkle
AlekseySQL_2
я решил сохранять текущие объекты в файлы
Объект - суть область памяти. Содержит обычно данные (свойства) и методы (программный код). Если с данными более-менее понятно, то как Вы собираетесь выдрать из памяти программный код (гипотетически, это вполне возможно) и как потом его использовать - это не вполне понятно. Возможно, Вы имели в виду свойства объектов?


Мне нужны только данные, которые потом легко распакуются в объекты, из которых были получены.

AlekseySQL_2
Есть у xml ограничения? Если да, то какие?
Да те же бинарные данные в чистом виде хранить не умеет.[/quot]

Спасибо, но это очевидно. Я в инете сейчас вижу, что люди сами создают библиотечки хранение словарей в xml, так что скорее всего ограничения более существенные.
11 фев 19, 15:05    [21806493]     Ответить | Цитировать Сообщить модератору
 Re: Python: Сериализация объектов в текстовом формате  [new]
Лысый дядька
Member

Откуда:
Сообщений: 299
vkle
Возможно, Вы имели в виду свойства объектов?

Прикол в том, что в питоне свойствами объектов могут быть функции и даже классы, при чем динамически созданные.

import datetime

class Foo:
   pass

a = Foo()

def GLOBAL():
	return now()

if GLOBAL() % 3:
	def foo():
        if GLOBAL() % 2:
			return 1
        return 0
else:
	def foo():
        if GLOBAL() % 3:
			return 3
        return 10
a.foo = foo

base = () if GLOBAL() else (Base,)
klass_BAR = type("Bar" + GLOBAL(), base, {})
klass_BAR.foo = foo() if GlOBAL() else lambda: None

a.cls = klass_BAR

a.instance = datetime



О чем я многоуважаемому уже не в первый раз толкую
11 фев 19, 15:11    [21806503]     Ответить | Цитировать Сообщить модератору
 Re: Python: Сериализация объектов в текстовом формате  [new]
Лысый дядька
Member

Откуда:
Сообщений: 299
AlekseySQL_2
Мне нужны только данные, которые потом легко распакуются в объекты, из которых были получены.


Нет ничего проще чем получить состояние объекта в питоне
print([f'{x}={getattr(a, x)}' for x in a.__dict__])
11 фев 19, 15:16    [21806511]     Ответить | Цитировать Сообщить модератору
 Re: Python: Сериализация объектов в текстовом формате  [new]
Лысый дядька
Member

Откуда:
Сообщений: 299
AlekseySQL_2
пожалуйста, уходи. Все что ты пишешь- бред, который противоречит кучи встроенных библиотек python (та же библиотека json)


Объясните бога ради, что общего имеет json с сериализацией объектов питона?
11 фев 19, 15:19    [21806513]     Ответить | Цитировать Сообщить модератору
 Re: Python: Сериализация объектов в текстовом формате  [new]
AlekseySQL_2
Member [заблокирован]

Откуда:
Сообщений: 17
Лысый дядька
AlekseySQL_2
пожалуйста, уходи. Все что ты пишешь- бред, который противоречит кучи встроенных библиотек python (та же библиотека json)


Объясните бога ради, что общего имеет json с сериализацией объектов питона?


Ну вот, человек троллит, задавая абстрактные вопросы (слабо относящиеся к топику), чтобы потом цепляться к мелочам в ответах и троллить дальше и дальше. Что сделает модератор? Неужели выполнит свою работу и удалит троллинг?
11 фев 19, 15:23    [21806522]     Ответить | Цитировать Сообщить модератору
 Re: Python: Сериализация объектов в текстовом формате  [new]
vkle
Member

Откуда: Самара
Сообщений: 14460
AlekseySQL_2
Неужели сделаете свою работу? Не верю!
Скажу Вам так. Здесь я на общественных началах (бесплатно и добровольно). Грязь, конечно, вычистить могу. Однако, не собираюсь выделять на это ни всё свое свободное время, ни, тем более, рабочее. Чисто там, где не мусорят. Ранее Вас я уже призывал воздержаться от грязи, однако, Вы по какой-то причине продолжаете ее разводить.

AlekseySQL_2
Мне нужны только данные
Понятно. Речь идет, видимо только о некоторых свойствах объекта, где хранятся необходимые Вам данные. Однако, это выяснилось только после уточняющего вопроса. Изначально речь шла об объекте, который в целом и не нужен оказался.

AlekseySQL_2
Спасибо, но это очевидно. Я в инете сейчас вижу, что люди сами создают библиотечки хранение словарей в xml, так что скорее всего ограничения более существенные.
Тогда о чем Вы хотели услышать, в каком контексте?

Разбор структур XML при значительных размерах файлов не слишком легок обычно по ресурсам, требует много памяти, потому есть всякие ухищрения, вроде разбора по кусочкам. В ряде случаев проще написать свой парсер, который из всего, что напихали в файл, выдернет только небольшие требуемые данные. Разумеется, функционал такого парсера минимален, но и работает он в разы быстрее, да и жрет памяти меньше.

С записью большого файла тоже не всё просто. Есть у меня сервис (сторонняя программулина на яве), который пишет лог в XML. Вроде, ничего сложного. Новый лог - открывается новый файл, в него пишется открывающий тэг, файл закрывается. Происходит событие - открывается файл, пишется фрагмент XML, файл закрывается. И так, пока файл не потолстеет до заданной величины. В финале записывается закрывающий тэг. Просто? Да. Надежно? В общем, да. Удобно? Ну вот тут как сказать... Сервис упал, закрывающего тэга нет, стандартные библиотеки вываливают ошибку разбора структуры. Проблема? Да. Решаемая? Да, но в читалке логов пришлось городить огород.

Написав столько текста, я не уверен, что изложил что-то полезное, возможно, для Вас "это очевидно", как и написанное ранее.

Задавайте вопросы конкретнее, формулируйте мысли точнее.
11 фев 19, 15:46    [21806560]     Ответить | Цитировать Сообщить модератору
 Re: Python: Сериализация объектов в текстовом формате  [new]
Лысый дядька
Member

Откуда:
Сообщений: 299
AlekseySQL_2,

Лёша, давайте еще раз. С самого начала текущей беседы. Вы хотите, цитирую "универсальный способ сериализации / десериализации в текстовом виде". Подчеркивание ваше, вы прям выделяете, что нужна именно сериализация / десериализация. Может быть вы не совсем осознаете, что это такое, ну так я вам расскажу. Сериализация / десериализация - это способ выгрузить объект из программы на внешний носитель, а потос в произвольный момент в другую программу загрузить. Так вот у меня есть все основания полагать, что в текстовом виде это сделать невозможно. Если у вас есть другие соображения - выкладывайте. Кроме того, ниже вы пишите цитирую "Мне нужны только данные". Дорогой дружище, вы только что просили сериализацию, теперь вам нужны только данные. Это же кардинально разные вещи. Если вы поменяли ТЗ, то так и скажите, зачем же вы маму зовете и ругаетесь? А как получить данные, я вам тоже показал. Не нравится? Аргументируйте, а не ведите себя как обкакавшаяся первоклассница. В самом то деле, не я же вам в штаны накакал, что вы на меня наезжаете - АРГУМЕНТИРУЙТЕ.
11 фев 19, 15:52    [21806568]     Ответить | Цитировать Сообщить модератору
 Re: Python: Сериализация объектов в текстовом формате  [new]
vkle
Member

Откуда: Самара
Сообщений: 14460
AlekseySQL_2
Лысый дядька
пропущено...


Объясните бога ради, что общего имеет json с сериализацией объектов питона?


Ну вот, человек троллит, задавая абстрактные вопросы (слабо относящиеся к топику), чтобы потом цепляться к мелочам в ответах и троллить дальше и дальше. Что сделает модератор? Неужели выполнит свою работу и удалит троллинг?
Уважаемый Алексей, давайте вместе с Вами прочтем Ваше первое сообщение с выражением.
AlekseySQL_2
2. С другой стороны текстовый формат json накладывает на код сохраняемых объектов ряд ограничений (Бизли "Python подробный справочник", стр 699)
AlekseySQL_2
Поискал в инете и не нашел каких- то законченных библиотек, которые полностью снимают ограничения json (возможно с помощью сохранения в json метаданных о "проблемных" полях) и предлагают универсальный способ сериализации / десериализации в текстовом виде.

Честно говоря, я тоже не понял, какое отношение имеет json с его проблемами к рассматриваемому вопросу "Сериализация объектов в текстовом формате". Преобразовать произвольные ключи/данные к требованиям формата - вполне выполнимая задача.

Конечно, я допускаю, что есть какая-то проблема, но какая - не ясно.

В общем, мне было бы тоже интересно узнать, каким образом json с его ограничениями мешает решению задачи. Формат довольно распространенный, используется повсеместно.

Или Вы считаете, что я тоже потроллить Вас решил?
11 фев 19, 16:13    [21806589]     Ответить | Цитировать Сообщить модератору
 Re: Python: Сериализация объектов в текстовом формате  [new]
vkle
Member

Откуда: Самара
Сообщений: 14460
Модератор: Сообщения не по теме и содержащие откровенные нападки удалены.
Алексея и Лысого дядьку прошу воздержаться от взаимных оскорблений и взаимного троллинга и сосредоточить усилия на обсуждении темы.
В бан я отправляю редко, однако, предупреждаю обоих, если после данного сообщения увижу срач - бан получите оба. Форум - не место для разборок и обид. И это сообщение не китайское предупреждение. Надеюсь, выразился ясно.
11 фев 19, 16:44    [21806633]     Ответить | Цитировать Сообщить модератору
 Re: Python: Сериализация объектов в текстовом формате  [new]
AlekseySQL_2
Member [заблокирован]

Откуда:
Сообщений: 17
vkle
Модератор: Сообщения не по теме и содержащие откровенные нападки удалены.
Алексея и Лысого дядьку прошу воздержаться от взаимных оскорблений и взаимного троллинга и сосредоточить усилия на обсуждении темы.
В бан я отправляю редко, однако, предупреждаю обоих, если после данного сообщения увижу срач - бан получите оба. Форум - не место для разборок и обид. И это сообщение не китайское предупреждение. Надеюсь, выразился ясно.


А- ха- ха! Весь идиотский троллинг оставлен (типа встроенные библиртеки json и xml работать в принципе не могут, потому что python- динамический язык). Ну и вопросы типа: обьясни- ка мне чем вот это отличается от того :)
Какой хороший модератор!
11 фев 19, 16:52    [21806647]     Ответить | Цитировать Сообщить модератору
 Re: Python: Сериализация объектов в текстовом формате  [new]
AlekseySQL_2
Member [заблокирован]

Откуда:
Сообщений: 17
Модератор, закрывай тему: честного нормального отношения я тут не получу. И вылизывай очко своему любимому троллю- дэбилу.
11 фев 19, 17:05    [21806669]     Ответить | Цитировать Сообщить модератору
 Re: Python: Сериализация объектов в текстовом формате  [new]
vkle
Member

Откуда: Самара
Сообщений: 14460
AlekseySQL_2
Какой хороший модератор!
Действительно, забыл напомнить. Действия модератора Вы можете обжаловать в администрации форума.
И, да, вынужден Вас забанить за очередное оскорбление.
11 фев 19, 17:09    [21806671]     Ответить | Цитировать Сообщить модератору
Все форумы / PHP, Perl, Python Ответить