2016-10-31 4 views
0

(этот вопрос каким-то образом связано с 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' 

Почему?

+0

Try '% r' вместо'% s'. –

+3

Ваши значения не являются обычными целыми числами и строками. Это некоторые другие странные типы. Посмотрите на документацию, где бы вы ни находились. Обратите внимание, что все, что вы делаете с этим dict, 'ast.literal_eval' не сможет восстановить исходный dict из вашего вывода, поскольку он не знает, как создавать любые странные объекты, которые вы используете в качестве значений. Однако вы могли бы восстановить что-то подобное с обычными типами Python для значений. – user2357112

+1

Вы сами определяете этот класс объекта 'o', или он определен в каком-то стороннем модуле? Если это ваш собственный класс, вы должны написать для него лучший метод '__repr__' &/или' __str__'. Если это класс сторонних разработчиков, вы можете написать для него класс-оболочку с помощью новых методов '__repr__' и/или' __str__'. –

ответ

-1

Похоже, что ТИПЫ - подробная информация, которая не является частью значения ключа. Я бы предложил использовать функцию построения в виде.

data = {"hello": 1} 
# print the type for the object 
print(type(data)) 

# to get for each key,val 
for k,v in data.iteritems(): 
    print(type(k), type(v)) 

Выход:

<type 'dict'> 
(<type 'str'>, <type 'int'>) 
+0

OP не спрашивает, как печатать тип переменной –

+0

Как сказал Chris_Rands, я просто хочу, чтобы значения были в том же виде, что и обычный вывод «print», но без информации о типе. – FedFranz

Смежные вопросы