Как расширить симпатичный модуль печати на таблицы?

У меня есть симпатичный модуль печати, который я подготовил, потому что я был недоволен, что модуль pprint выпустил миллион строк для списка номеров, в которых был один список. Вот пример использования моего модуля.

>>> a=range(10) >>> a.insert(5,[range(i) for i in range(10)]) >>> a [0, 1, 2, 3, 4, [[], [0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5, 6], [0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5, 6, 7, 8]], 5, 6, 7, 8, 9] >>> import pretty >>> pretty.ppr(a,indent=6) [0, 1, 2, 3, 4, [ [], [0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5, 6], [0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5, 6, 7, 8]], 5, 6, 7, 8, 9] 

Код выглядит так:

 """ pretty.py prettyprint module version alpha 0.2 mypr: pretty string function ppr: print of the pretty string ONLY list and tuple prettying implemented! """ def mypr(w, i = 0, indent = 2, nl = '\n') : """ w = datastructure, i = indent level, indent = step size for indention """ startend = {list : '[]', tuple : '()'} if type(w) in (list, tuple) : start, end = startend[type(w)] pr = [mypr(j, i + indent, indent, nl) for j in w] return nl + ' ' * i + start + ', '.join(pr) + end else : return repr(w) def ppr(w, i = 0, indent = 2, nl = '\n') : """ see mypr, this is only print of mypr with same parameters """ print mypr(w, i, indent, nl) 

Вот один фиксированный текст для печати таблиц в моем хорошем модуле печати:

 ## let's do it "manually" width = len(str(10+10)) widthformat = '%'+str(width)+'i' for i in range(10): for j in range(10): print widthformat % (i+j), print 

У вас есть альтернатива для того, чтобы этот код был достаточно обобщен для симпатичного модуля печати?

То, что я нашел для таких регулярных случаев после публикации вопроса, является этим модулем: prettytable Простая библиотека Python для легкого отображения табличных данных в визуально привлекательном формате таблицы ASCII

  • Каков предпочтительный способ записи пути к файлу в Python
  • Форматирование валюты в Python
  • Удобный формат времени в Python?
  • Номер формата с использованием нотации LaTeX в Python
  • форматирование длинных чисел как строк в python
  • 4 Solutions collect form web for “Как расширить симпатичный модуль печати на таблицы?”

    Если вы ищете красивое форматирование для матриц, вывод numpy отлично выглядит прямо из коробки:

     from numpy import * print array([[i + j for i in range(10)] for j in range(10)]) 

    Вывод:

     [[ 0 1 2 3 4 5 6 7 8 9] [ 1 2 3 4 5 6 7 8 9 10] [ 2 3 4 5 6 7 8 9 10 11] [ 3 4 5 6 7 8 9 10 11 12] [ 4 5 6 7 8 9 10 11 12 13] [ 5 6 7 8 9 10 11 12 13 14] [ 6 7 8 9 10 11 12 13 14 15] [ 7 8 9 10 11 12 13 14 15 16] [ 8 9 10 11 12 13 14 15 16 17] [ 9 10 11 12 13 14 15 16 17 18]] 

    Ты можешь написать:

     '\n'.join( # join the lines with '\n' ' '.join( # join one line with ' ' "%2d" % (i + j) # format each item for i in range(10)) for j in range(10)) 

    Использование рецепта рецепта стола Джорджа Саккиса :

     print(indent(((i + j for i in range(10)) for j in range(10)), delim=' ', justify='right')) 

    выходы:

     0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 10 2 3 4 5 6 7 8 9 10 11 3 4 5 6 7 8 9 10 11 12 4 5 6 7 8 9 10 11 12 13 5 6 7 8 9 10 11 12 13 14 6 7 8 9 10 11 12 13 14 15 7 8 9 10 11 12 13 14 15 16 8 9 10 11 12 13 14 15 16 17 9 10 11 12 13 14 15 16 17 18 

    PS. Чтобы заставить это работать, я внес несколько изменений в рецепт. Я изменил wrapfunc(item) на wrapfunc(str(item)) :

     def rowWrapper(row): newRows = [wrapfunc(str(item)).split('\n') for item in row] 

    Моим ответом на такие обычные случаи было бы использование этого модуля: prettytable Простая библиотека Python для легкого отображения табличных данных в визуально привлекательном формате таблицы ASCII

    Python - лучший язык программирования в мире.