Есть ли хороший принтер для данных python?
Работая с python в интерактивном режиме, иногда необходимо отображать результат, который представляет собой некоторую произвольно сложную структуру данных (например, списки со встроенными списками и т.д.),
Способ отображения по умолчанию - это только один массивный линейный дамп, который просто обертывается снова и снова, и вы должны тщательно анализировать его, чтобы прочитать его.
Есть ли что-то, что возьмет любой объект python и отобразит его более рационально. например.
[0, 1,
[a, b, c],
2, 3, 4]
вместо:
[0, 1, [a, b, c], 2, 3, 4]
Я знаю, что это не очень хороший пример, но я думаю, что вы поняли идею.
Ответы
Ответ 1
from pprint import pprint
a = [0, 1, ['a', 'b', 'c'], 2, 3, 4]
pprint(a)
Обратите внимание, что для краткого списка, такого как мой пример, pprint фактически распечатает все на одной строке. Однако для более сложных структур он довольно хорошо справляется с довольно печатными данными.
Ответ 2
Иногда YAML может быть хорошо для этого.
import yaml
a = [0, 1, ['a', 'b', 'c'], 2, 3, 4]
print yaml.dump(a)
Выдает:
- 0
- 1
- [a, b, c]
- 2
- 3
- 4
Ответ 3
В дополнение к pprint.pprint
, pprint.pformat
действительно полезен для создания читаемых __repr__
s. Мой сложный __repr__
обычно выглядит так:
def __repr__(self):
from pprint import pformat
return "<ClassName %s>" % pformat({"attrs":self.attrs,
"that_i":self.that_i,
"care_about":self.care_about})
Ответ 4
Другим хорошим вариантом является использование IPython, который представляет собой интерактивную среду с множеством дополнительных функций, включая автоматическую красивую печать, tab-completion методов, легкий доступ к оболочке и многое другое. Он также очень прост в установке.
Учебник по IPython