мой код работает абсолютно нормально, единственная проблема, с которой я сталкиваюсь, заключается в том, что после удаления текста появляется пустая строка там, где раньше был текст. Поэтому, когда я просматриваю текстовый файл, между строками двух игроков есть огромный пустой промежуток. Примером этого может быть:
Джон | 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 = 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)
Последнее редактирование:
Перед запуском:
После запуска:
Я удалил мир, и пустая строка не появилась.
Привет, Барис, извини за путаницу, но я спрашиваю, как убрать пустую строку, которая появляется после удаления игрока.
Привет, Хамза, с конфигурацией, которой я поделился, а также с конфигурацией, которая у вас есть (с «not (line.startswith (save_delete))»), я не вижу пустой строки после удаления игрока. Пожалуйста, смотрите последнее редактирование.
Кажется, что
save_delete
не соответствует началу ни одной из строк, которые вы читаете изteamhighscores.txt
. Можете ли вы поделиться примером, который не работает? Что вводится вsave_delete
и какая строка вteamhighscores.txt
должна совпадать?