Как удалить пустую строку в текстовом файле после удаления определенной строки?

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

Джон | 35

Томас | 56

(Пустая строка)

Тимми | 34

это мой код:

# This ELIF statement will allow the user to write the name and score of the player.
        if choice == "A" or choice == "a":
            save_name = input('Enter your name: ').title()
            save_score = input('Enter your score: ')
            text_file = open("highscores.txt", "a")
            text_file.write("\n" + save_name + ' | ' + save_score + "\n")
            text_file.close()
            text_file = open("highscores.txt", "r")
            whole_thing = text_file.read()
            print (whole_thing)
            text_file.close()
            
# This ELIF statement will allow the user to delete a player from the text file.
        elif choice == "B" or choice == "b":
            print("These are the current players and their score")
            text_file = open("highscores.txt", "r")
            whole_thing = text_file.read()
            print(whole_thing)
            text_file.close()
            time.sleep(0.3)
            save_delete = input("Please enter the name of the player you wish to delete: ") + " | "
            with open("highscores.txt", "r") as f:
                lines = f.readlines()
            with open("highscores.txt", "w") as f:
                for line in lines:
                    if not(line.startswith(save_delete)):
                        f.write(line)

Кажется, что save_delete не соответствует началу ни одной из строк, которые вы читаете из teamhighscores.txt. Можете ли вы поделиться примером, который не работает? Что вводится в save_delete и какая строка в teamhighscores.txt должна совпадать?

Emrah Diril 19.03.2022 05:56
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, вам нужно использовать "|" с пробелом "|". В противном случае в ваших данных не будет улова, см. пример ниже:

save_delete = input("Please enter the name of the player you wish to delete: ") + "|"

if save_delete in "hello |":
    print("Yes")

print(lines)

print(save_delete)

выход:

Пожалуйста, введите имя игрока, которого вы хотите удалить: привет ['привет |\n', 'мир |\n', 'нет войне |\n', 'мир дома |\n', 'мир во всем мире |'] привет| #<<<<<<<<<<<<<<<<<<<<<<<<<<<

когда save_delete изменяется следующим образом

save_delete = input("Please enter the name of the player you wish to delete: ") + " |" # " |" has space.

у нас есть совпадение, см. следующее:

    Please enter the name of the player you wish to delete: hello
Yes <<<<<<<<<<<<<<<<<<<<<<<<<<<<
['hello |\n', 'world |\n', 'no to war |\n', 'peace at home |\n', 'peace in the world |']
hello | <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Теперь я могу удалить «Привет» из своего текста.

Мой текст ранее:

привет | мир | нет войне | мир дома | мир во всем мире |

Мой текст после запуска программы:

мир | нет войне | мир дома | мир во всем мире |

см. код, который я использовал:

with open("text_text.txt", "w") as f:
    for line in lines:
        print(type(line))
        print(line)
        if save_delete not in line:
            print("Yes")
            f.write(line)

Последнее редактирование:

Перед запуском:

После запуска:

Я удалил мир, и пустая строка не появилась.

Привет, Барис, извини за путаницу, но я спрашиваю, как убрать пустую строку, которая появляется после удаления игрока.

Hamza Khan 21.03.2022 15:49

Привет, Хамза, с конфигурацией, которой я поделился, а также с конфигурацией, которая у вас есть (с «not (line.startswith (save_delete))»), я не вижу пустой строки после удаления игрока. Пожалуйста, смотрите последнее редактирование.

Baris Ozensel 21.03.2022 17:34

Другие вопросы по теме

Похожие вопросы

Как отфильтровать избыточные функции с помощью shap.utils.hclust не только с помощью гистограммы визуального контроля?
Удаление строки из одного списка со строками/цифрами
Как увеличить число, которое находится в другом файле в python
NoReverseMatch Реверс для 'сохранить-пост' с аргументами '('',)' не найден. Пробовали 1 шаблон(ы): ['save/(?P<pk>[0-9]+)$']
Кто-нибудь знает, почему мой код найдет файлы только для первого элемента в списке, а не для других? то есть он будет фильтровать файлы '*a.LOG.bz2' в имени файла
Как исправить UnboundLocalError для неназначенной переменной, которую я назначил?
Как заставить его печатать результаты в одной строке?
Как сравнить текущую строку с двумя предыдущими строками на основе определенных условий в Python
Python Ctypes — запись в память, созданную malloc
Как вызвать динамически загружаемый модуль, не вызывая NameError: имя «имя» не определено