Как не добавить разделитель после последнего элемента - PullRequest
0 голосов
/ 12 февраля 2019

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

with open ('hotel.txt', 'w') as file:
    for i in list:
        for j in i:
            file.write(j+':')
        file.write('\n')

: Исключение: строка имеет неверное количество значений, (фактическое) 8! = 7 (ожидается)

Также: я не могу изменить форму таблицы из-зараспайка

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Обычно используется str.join при объединении строк, разделенных разделителями:

with open ('hotel.txt', 'w') as file:
    for i in list:
        file.write(":".join(i))
        file.write('\n')
0 голосов
/ 12 февраля 2019

Вместо того, чтобы писать разделитель после каждого элемента и пытаться избежать написания последнего, напишите разделитель перед каждым элементом и избегайте написания first one.

with open ('hotel.txt', 'w') as file:
    for i in list:
        delim = ""
        for j in i:
            file.write(delim + j)
            delim = ":"
        file.write('\n')

Другой подход заключается в том, чтобы исключить последний элемент из цикла и записать его отдельно:

with open ('hotel.txt', 'w') as file:
    for i in list:
        for j in i[:-1]:
            file.write(j + ":")
        file.write(list[-1] + '\n')

Но при этом предполагается, что в списке всегда есть хотя бы один элемент (пустые списки получат ошибкуна list[-1]).Вы можете избежать этого с помощью оператора if, но вы по-прежнему делаете дополнительную копию большей части списка ... вы можете использовать itertools.islice, чтобы избежать этого, но затем вы перетаскиваете весь список.Во всяком случае, я думаю, что первый способ проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...