Есть ли симпатичный принтер для данных Python? - PullRequest
17 голосов
/ 18 сентября 2008

В интерактивном режиме работы с python иногда необходимо отобразить результат, представляющий собой произвольно сложную структуру данных (например, списки со встроенными списками и т. Д.) По умолчанию они отображаются только в виде одного массивного линейного дампа, который просто переносится снова и снова, и вам нужно внимательно проанализировать его, чтобы прочитать.

Есть ли что-то, что возьмет любой объект python и отобразит его более рационально. например,

[0, 1,
    [a, b, c],
    2, 3, 4]

вместо:

[0, 1, [a, b, c], 2, 3, 4]

Я знаю, что это не очень хороший пример, но я думаю, вы поняли идею.

Ответы [ 4 ]

26 голосов
/ 18 сентября 2008
from pprint import pprint
a = [0, 1, ['a', 'b', 'c'], 2, 3, 4]
pprint(a)

Обратите внимание, что для краткого списка, подобного моему примеру, pprint на самом деле напечатает все это в одной строке. Однако для более сложных структур он довольно неплохо справляется с печатью данных.

10 голосов
/ 18 сентября 2008

Сом YAML может быть хорошо для этого.

import yaml
a = [0, 1, ['a', 'b', 'c'], 2, 3, 4]
print yaml.dump(a)

Производит:

- 0
- 1
- [a, b, c]
- 2
- 3
- 4
8 голосов
/ 18 сентября 2008

В дополнение к pprint.pprint, pprint.pformat действительно полезно для создания читаемых __repr__ с. Мой комплекс __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})
3 голосов
/ 18 сентября 2008

Другим хорошим вариантом является использование IPython , который представляет собой интерактивную среду с множеством дополнительных функций, включая автоматическую красивую печать, завершение табуляции методов, легкий доступ к оболочке и многое другое. Это также очень легко установить.

Учебник по IPython

...