В PHP я могу это сделать:
echo '<pre>'
print_r($array);
echo '</pre>'
В Python я сейчас просто делаю это:
print the_list
Однако это вызовет большой объем данных. Есть ли способ напечатать это красиво в читаемом дереве? (с отступом)?
В PHP я могу это сделать:
echo '<pre>'
print_r($array);
echo '</pre>'
В Python я сейчас просто делаю это:
print the_list
Однако это вызовет большой объем данных. Есть ли способ напечатать это красиво в читаемом дереве? (с отступом)?
from pprint import pprint
pprint(the_list)
Вы имеете в виду что-то вроде...:
>>> print L
['this', 'is', 'a', ['and', 'a', 'sublist', 'too'], 'list', 'including', 'many', 'words', 'in', 'it']
>>> import pprint
>>> pprint.pprint(L)
['this',
'is',
'a',
['and', 'a', 'sublist', 'too'],
'list',
'including',
'many',
'words',
'in',
'it']
>>>
...? Из вашего беглого описания, первый библиотечный модуль pprint - это первое, что приходит на ум; однако, если вы можете описать примеры входов и выходов (чтобы вам не нужно было изучать PHP, чтобы помочь вам;-), мы можем предложить более конкретную помощь!
Быстрый взлом при отладке, который работает без импорта pprint
, должен был бы присоединиться к списку на '\n'
.
>>> lst = ['foo', 'bar', 'spam', 'egg']
>>> print '\n'.join(lst)
foo
bar
spam
egg
Просто "распакуя" список в аргументе функции печати и используя новую строку (\n) в качестве разделителя.
print (* lst, sep = '\n')
lst = ['foo', 'bar', 'spam', 'egg']
print(*lst, sep='\n')
foo
bar
spam
egg
https://docs.python.org/3/library/pprint.html
Если вам нужен текст (например, для использования с проклятиями):
import pprint
myObject = []
myText = pprint.pformat(myObject)
Тогда переменная myText
будет похожа на php var_dump
или print_r
. Проверьте документацию на наличие дополнительных параметров, аргументов.
Как показывают другие ответы, модуль pprint выполняет трюк.
Тем не менее, в случае отладки, где вам может понадобиться поместить весь список в какой-то файл журнала, возможно, придется использовать метод pformat вместе с модулем протоколирование вместе с pprint.
import logging
from pprint import pformat
logger = logging.getLogger('newlogger')
handler = logging.FileHandler('newlogger.log')
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.WARNING)
data = [ (i, { '1':'one',
'2':'two',
'3':'three',
'4':'four',
'5':'five',
'6':'six',
'7':'seven',
'8':'eight',
})
for i in xrange(3)
]
logger.error(pformat(data))
И если вам нужно напрямую зарегистрировать его в файле, нужно указать выходной поток, используя ключевое слово stream. Ссылка
from pprint import pprint
with open('output.txt', 'wt') as out:
pprint(myTree, stream=out)
Как упоминалось в других ответах, pprint
- отличный модуль, который будет делать то, что вы хотите. Однако, если вы не хотите импортировать его и хотите распечатать вывод отладки во время разработки, вы можете аппроксимировать его вывод.
Некоторые из других ответов отлично работают для строк, но если вы попробуете их с объектом класса, он даст вам ошибку TypeError: sequence item 0: expected string, instance found
.
Для более сложных объектов убедитесь, что класс имеет метод __repr__
, который печатает нужную информацию о свойствах:
class Foo(object):
def __init__(self, bar):
self.bar = bar
def __repr__(self):
return "Foo - (%r)" % self.bar
И затем, когда вы хотите распечатать вывод, просто сопоставьте свой список с функцией str
следующим образом:
l = [Foo(10), Foo(20), Foo("A string"), Foo(2.4)]
print "[%s]" % ",\n ".join(map(str,l))
выходы:
[Foo - (10),
Foo - (20),
Foo - ('A string'),
Foo - (2.4)]
Вы также можете сделать что-то вроде переопределения метода __repr__
list
, чтобы получить форму вложенной довольно печатной печати:
class my_list(list):
def __repr__(self):
return "[%s]" % ",\n ".join(map(str, self))
a = my_list(["first", 2, my_list(["another", "list", "here"]), "last"])
print a
дает
[first,
2,
[another,
list,
here],
last]
К сожалению, нет отступ второго уровня, но для быстрой отладки это может быть полезно.
Для Python 3 я делаю то же самое, что и shxfee:
def print_list(my_list):
print('\n'.join(my_list))
a = ['foo', 'bar', 'baz']
print_list(a)
которые выходят
foo
bar
baz
В стороне, я использую подобную вспомогательную функцию, чтобы быстро видеть столбцы в pandas DataFrame
def print_cols(df):
print('\n'.join(df.columns))