Python-удалить пустые строки текста в конце файла

Я пишу скрипт, который изменяет любые текстовые файлы. Он заменяет пробелы пустыми строками. Она удаляет пустые строки в конце файла. Изображение показывает результат, который я хочу.

enter image description here

Я могу получить очень близко к желаемому выходу. Проблема в том, что я не могу избавиться от последней пустой строки. Думаю, это как-то связано с последней строкой. е.г ' the lines below me should be gone на самом деле выглядит вот так ' the lines below me should be gonen' похоже, что новые строки создаются на предыдущая строка. e.g если строка 4 имеет n чем строка 5 фактически будет пустой строкой, а не строкой 4.

Я должен отметить, что я не могу использовать rstrip или strip

мой код до сих пор.

def clean_file(filename):
    # function to check if the line can be deleted
    def is_all_whitespace(line):
        for char in line:
            if char != ' ' and char != 'n':
                return False
        return True

    # generates the new lines
    with open(filename, 'r') as file:
        file_out = []
        for line in file:
            if is_all_whitespace(line):
                line = 'n'
            file_out.append(line)

    # removes whitespaces at the end of file
    while file_out[-1] == 'n':  # while the last item in lst is blank
        file_out.pop(-1)  # removes last element

    # writes the new the output to file
    with open(filename, 'w') as file:
        file.write(''.join(file_out))

clean_file('test.txt')

1 ответов


на \n по существу означает "создать другую строку"

поэтому, когда вы удалили все строки \n, есть еще предыдущая строка

the lines below me should be gone\n

что снова означает "создать другую строку", помимо тех, которые вы уже удалили

так как вы говорите, вы не можете использовать rstrip, вы можете закончить цикл с

file_out[-1] = file_out[-1].strip('\n')

удалить \n из последнего элемента. Потому что \n не может существовать нигде в строке, rstrip и strip будет иметь тот же эффект

и без любой strip или endswith:

if file_out[-1][-1] == '\n':
    file_out[-1] = file_out[-1][:-1]

отметим, что \n - это одиночный символ, порядковый 0x0a как наговор, не двух символов \ и n, ординалы 0x5c и 0x6e. Вот почему мы используем -1, а не -2