Таблица печати Python для термина и определения с обработанным переполнением - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь сделать программу, которая печатает таблицу из двух столбцов (термин и определение), примерно так: (ширина таблицы должна быть 80 символов)

    +--------------------------------------------------------------------------+
    |                  Term                |              Definition            
    |
    +--------------------------------------+-----------------------------------+
    |       this is the first term.        |This is the definition for thefirst| 
    |                                      |term that wraps around because the |
    |                                      |definition is longer than the width|
    |                                      |of the column.                     |
    +--------------------------------------+-----------------------------------+
    |The term may also be longer than the  |This is the definition for the     |
    |width of the column and should wrap   |second term.                       |
    |around as well.                       |                                   |
    +--------------------------------------+-----------------------------------+

У меня есть код для этого, но он печатает «это первый термин» в каждой строке, потому что я использовал вложенный цикл for.(Также попытался реализовать модуль textwrap) Вот мой код:

# read file
with open(setsList[selectedSet-1], "r", newline="") as setFile:
    cardList = list(csv.reader(setFile))
    setFile.close()

for i in range(len(cardList)):
    wrapped_term = textwrap.wrap(cardList[i][0], 30)
    wrapped_definition = textwrap.wrap(cardList[i][1], 30)

    for line in wrapped_term:
        for line2 in wrapped_definition:
            print(line, "                              ",line2)
        print("- - - - - - - - - - - - - - - - - - - - - - - - - - -")

Кто-нибудь может предложить решение?Спасибо.

1 Ответ

0 голосов
/ 29 мая 2018

После большого количества (пробных) и видео с ошибками и случайных видео на YouTube, решение: (если у кого-то есть подобная проблема)

with open("table.csv", "r", newline="") as setFile:
cardList = list(csv.reader(setFile))
setFile.close()

print("+------------------------------------------------------------------------------+")
print("|                Term                  |               Definition              |")
print("+------------------------------------------------------------------------------+")
print()



for x in range(len(cardList)):

wrapped_term = textwrap.wrap(cardList[x][0], 30)
wrapped_definition = textwrap.wrap(cardList[x][1], 30)

wrapped_list = []


for i in range(len(wrapped_term)):
    try:
        wrapped_list.append([wrapped_term[i], wrapped_definition[i]])

    except IndexError:

        if len(wrapped_term) > len(wrapped_definition):

            wrapped_list.append([wrapped_term[i], ""])

        elif len(wrapped_term) < len(wrapped_definition):

            wrapped_list.append(["", wrapped_definition[i]])

column1 = len("               Term                ")
column2 = len("              Definition            ")


print("+--------------------------------------+---------------------------------------+")
for item in wrapped_list:
    print("|", item[0], " "*(column1 - len(item[0])),"|", item[1], " "*(column2-len(item[1])), "|")
print("+--------------------------------------+---------------------------------------+")
print("*                                                                              *")

По сути, я создал упакованную версию каждого из моих условий иопределения.

Затем программа try-catch проверяет, является ли термин длиннее определения (в терминах строк) и, если это так, ставит пустые строки для определения и наоборот.

Затем я создал упакованный список (объединенные термины и определения), чтобы сохранить это выше.

С помощью этого видео: (https://www.youtube.com/watch?v=B9BRuhqEb2Q), Я отформатировал таблицу.

Надеюсь, что это помогло любому, кто борется с подобной проблемой - это может быть применено к любому количеству столбцов в таблице и к любой длине файла CSV.

...