Код не удаляет строку из файла, когда в файле одна строка
Пользователь вводит строку, которую хочет удалить из файла. Код перезаписывает в файл все строки кроме нужной. Когда остается одна строчка, она не удаляется. Нужно сделать так, чтобы удалялась последняя строка и файл становился чистым.
def zadachs():
ask='Введите желаемый номер пункта (1 - просмотр текущих задач, 2 - запись новых задач, 3 - удаление существующей задачи, 4 - выход из программы): '
vopros1='Напишите здесь Вашу новую задачу: '
vopros2='Введите задачу, которую вы хотите удалить: '
while True:
b=input(ask)
try:
b=int(b)
except ValueError:
print("Введите номер пункта")
continue
if b==4:
break
if b==1:
with open(r'C:\Users\username\test\zadachi.txt', 'r') as f:
zd=f.read()
print(zd)
if len(zd)==0:
print("На текущий момент задач нет")
elif b==2:
zadacha = input (vopros1)
with open(r'C:\Users\username\test\zadachi.txt', 'a') as f:
f.write('\n' + zadacha)
elif b==3:
dell = input (vopros2)
f=open(r'C:\Users\username\test\zadachi.txt', 'r')
lines=f.readlines()
f.close()
f=open(r'C:\Users\username\test\zadachi.txt', 'w')
f.truncate()
for line in lines:
if line != dell + '\n':
f.write(line)
f.close()
else:
print('Такого пункта нет')
zadachs()
Ответы (1 шт):
Когда у вас в файле остается одна строка, которую нужно удалить, ваш код ничего не записывает в файл, поэтому исходное его содержимое не удаляется (если записать что-то в файл открытый в режиме 'w', то файл будет очищен автоматически, но если ничего не записать, то очистка не произойдет). Можно принудительно очищать файл перед записью в него с помощью метода truncate(). Также, у последней строки в файле не будет символа '\n' в конце, поэтому нужно наоборот обрезать символ переноса строки (.rstrip('\n')) и сравнивать строки без него:
f=open(r'C:\Users\username\test\zadachi.txt', 'w')
f.truncate() # Обрезать все содержимое файла, идущее после текущей позиции
for line in lines:
if line.rstrip('\n') != dell:
f.write(line)
f.close()