Python: печать списка в виде таблицы с использованием texttable

#python #list

#python #Список

Вопрос:

Я хочу использовать texttable для печати списка в виде таблицы.

Это мой код:

 col_types = ['t']
col_names = ['sessions/week']
col_align = ['r']
weeks_result = []
for i in range(1,53):
    col_types.append("t")
    col_names.append(str(i))
    col_align.append("r")
table = Texttable()
table.set_deco(Texttable.HEADER)
table.set_cols_dtype(col_types)
table.set_cols_align(col_align)
table.add_row(col_names)

import pdb; pdb.set_trace()
for area, results_per_week in areas_weeks_dic.items():
    weeks_result.append(area)
    for i in range(1,53):
        weeks_result.append(results_per_week[str(i)])
    print weeks_result
    table.add_row(weeks_result)
    weeks_result = []

print table.draw()
  

Как вы можете видеть выше, у меня есть точка останова, которую я использовал для печати некоторых данных, чтобы вы могли видеть, в основном каждая строка содержит 53 элемента.
Каким-то образом этот базовый код выдает мне очень странную ошибку, которую я не могу расшифровать.
Трассировка приведена ниже в конце. Что я делаю не так? В чем причина ValueError ?

 > c:...estprocess.py(600)<module>()
-> for area, results_per_week in areas_weeks_dic.items():
(Pdb) print col_types
['t', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't',
 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't', 't']
(Pdb) print col_names
['sessions/week', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24
', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49
', '50', '51', '52']
(Pdb) print col_align
['r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r',
 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r']
(Pdb) c
['TA | BaseConcept', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 5, 10, 12, 16, 29, 17, 24, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
['TA | Telephony', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 5, 10, 12, 16, 29, 17, 24, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
['TA | Driver Information', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 5, 10, 12, 16, 29, 17, 24, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
['TA | Telematics', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 5, 10, 12, 16, 29, 17, 24, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
['TA | Vehicle Functions', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 5, 10, 12, 16, 29, 17, 24, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
['TA | Audio', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 5, 10, 12, 16, 29, 17, 24, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0]
['TA | Entertainment', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 5, 10, 12, 16, 29, 17, 24, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
['TA | Platform', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 5, 10, 12, 16, 29, 17, 24, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
['TA | HMI', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 5, 10, 12, 16, 29, 17, 24, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0]
['TA | Speech amp; Language', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 5, 10, 12, 16, 29, 17, 24, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
['TA | Build Acceptance Test', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 5, 10, 12, 16, 29, 17, 24, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
['TA | OTA', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 5, 10, 12, 16, 29, 17, 24, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0]
['TA | Navigation', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 5, 10, 12, 16, 29, 17, 24, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
['TA | Connectivity', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 5, 10, 12, 16, 29, 17, 24, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
['TA | Smoke Test', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 5, 10, 12, 16, 29, 17, 24, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Traceback (most recent call last):
  File "GenerateTestProcess.py", line 600, in <module>
    for area, results_per_week in areas_weeks_dic.items():
  File "GenerateTestProcess.py", line 324, in draw
    out  = self._draw_line(row)
  File "GenerateTestProcess.py", line 493, in _draw_line
    line = self._splitit(line, isheader)
  File "GenerateTestProcess.py", line 534, in _splitit
    array.extend(textwrap.wrap(c, width))
  File "C:Python27libtextwrap.py", line 354, in wrap
    return w.wrap(text)
  File "C:Python27libtextwrap.py", line 329, in wrap
    return self._wrap_chunks(chunks)
  File "C:Python27libtextwrap.py", line 258, in _wrap_chunks
    raise ValueError("invalid width %r (must be > 0)" % self.width)
ValueError: invalid width -2 (must be > 0)
  

Комментарии:

1. Это 16-я строка таблицы, из которой возникает ошибка — попробуйте просмотреть исходные данные этой строки.

2. Привет, что? откуда вы получаете 16-е место?

3. Он напечатал 15 строк, а затем вызвал исключение..

4. @Korem, он напечатал все строки и разбился на table.draw()

Ответ №1:

Мне удалось решить это просто методом проб и ошибок. Поскольку у меня была большая таблица ( 50 or so columns) , он не мог распечатать ее без соответствующей информации о ширине для каждой ячейки.

Как только я предоставил массив с шириной каждой ячейки, он сразу же заработал.

 table.set_cols_width(col_width)