#python #prettytable
Вопрос:
У меня есть небольшой вопрос. Как я могу разделить таблицу, если у них одно и то же имя столбца?
Вот такой пример:
----------------------------
| AUDIO TRACKS |
---- ---------- ------------
| ID | LangCode | LangName |
---- ---------- ------------
| 1 | de | German |
| 2 | de | German |
| 3 | en | English |
| 4 | en | English |
| 5 | es | Spanish |
| 6 | es | Spanish |
----------------------------
Это мой желаемый результат
----------------------------
| AUDIO TRACKS |
---- ---------- ------------
| ID | LangCode | LangName |
---- ---------- ------------
| 1 | de | German |
| 2 | de | German |
|----------------------------|
| 3 | en | English |
| 4 | en | English |
|----------------------------|
| 5 | es | Spanish |
| 6 | es | Spanish |
----------------------------
Ответ №1:
Вы можете сделать это с itertools.groupby
помощью и после каждой группы добавить split_row, как показано ниже:
from prettytable import PrettyTable
from itertools import groupby
myTable = PrettyTable(["ID", "LongCode", "LangName"])
lst = [["1", "de", "German"], ["2", "de", "German"],
["3", "en", "English"], ["4", "en", "English"],
["5", "es", "Spanish"], ["4", "es", "Spanish"]]
split_row = ['—' * x for x in [2, 8, 10]]
myTable.title = 'AUDIO TRACKS'
for key, group in groupby(lst, lambda x: x[1]):
for g in group:
myTable.add_row(g)
myTable.add_row(split_row)
print(myTable)
Выход:
----------------------------
| AUDIO TRACKS |
---- ---------- ------------
| ID | LongCode | LangName |
---- ---------- ------------
| 1 | de | German |
| 2 | de | German |
| —— | ———————— | —————————— |
| 3 | en | English |
| 4 | en | English |
| —— | ———————— | —————————— |
| 5 | es | Spanish |
| 4 | es | Spanish |
| —— | ———————— | —————————— |
---- ---------- ------------
Комментарии:
1. Большое вам спасибо 🙂 это то, что я ищу. Что я сделал совсем немного для split_row, потому что у меня так много столбцов, так это умножил тире 🙂
2. @mark12345 отредактированный ответ