(этот вопрос каким-то образом связано с this one.)Как сохранить информацию о типе информации Python?
У меня есть объект «о», который возвращается из модуля третьей стороной (код которого достаточно запутана). При печати этого объекта я получаю этот выход:
>>> print(o)
[{'pid': [unsigned int:UniqueProcessId]: 0x000007FC, 'name': [String:ImageFileName]: 'leon.exe\x00', 'offset': 2236079360}]
Насколько я понимаю, это список словарей. Однако вывод также содержит некоторую дополнительную информацию о типе (например: [unsigned int: UniqueProcessId]), которая мешает мне разобрать этот вывод с помощью модуля «ast» (то есть с помощью функции ast.literal_eval()).
Мой вопрос: как я могу избежать печати этого типа информации? То есть я хочу, чтобы получить этот результат:
>>> smartprint(o)
[{'pid': 0x000007FC, 'name': 'leon.exe', 'offset': 2236079360}]
Additionaly: Вы можете объяснить мне, почему эта информация распечатывается и то, что он на самом деле представляет собой? Если я печатаю отдельные значения в цикле, как в этом коде:
for ps in out:
first = True
for info in ps:
if first:
first = False
else:
print '\'%s\':\'%s\'' % (info, ps[info])
Я не получить любую дополнительную информацию о типе. Вместо этого я получаю:
'pid':'2044'
'name':'leon.exe'
'offset':'2236079360'
Почему?
Try '% r' вместо'% s'. –
Ваши значения не являются обычными целыми числами и строками. Это некоторые другие странные типы. Посмотрите на документацию, где бы вы ни находились. Обратите внимание, что все, что вы делаете с этим dict, 'ast.literal_eval' не сможет восстановить исходный dict из вашего вывода, поскольку он не знает, как создавать любые странные объекты, которые вы используете в качестве значений. Однако вы могли бы восстановить что-то подобное с обычными типами Python для значений. – user2357112
Вы сами определяете этот класс объекта 'o', или он определен в каком-то стороннем модуле? Если это ваш собственный класс, вы должны написать для него лучший метод '__repr__' &/или' __str__'. Если это класс сторонних разработчиков, вы можете написать для него класс-оболочку с помощью новых методов '__repr__' и/или' __str__'. –