как удалить строку из текстового файла в Python
Привет товарищи программисты!
у меня есть вопрос
я написал код на python, где мы регистрируем сейф для людей с паролем
в меню у вас есть 4 варианта
первый вариант - увидеть, сколько сейфов осталось (от 1 до 12), второй вариант - получить сейф, если все 12 сейфов используются. Python ответит "нет сейфов", если есть доступный сейф будет применен случайный сейфовый номер, и вы можете добавить к нему свой пароль. С помощью третьего варианта вы можете открыть свой сейф
с четвертым вариантом вы можете удалить свой сейф, если вы больше не хотите его использовать, и здесь я застрял со своим кодом, я не знаю, как удалить ТОЛЬКО строку, где находится сейф, и после его удаления строки под ним нужно переместить вверх, чтобы не осталось пустых мест.
чтобы удалить ваш сейф, пользователь должен ввести свой номер, а затем свой пароль, если они совпадают со строкой в текстовом файле, вариант 4 должен удалить только эту строку.
Может кто-то мне помочь, пожалуйста.
def kluis_teruggeven(): это строка, в которой код четвертой опции
текстовый файл имеет
2;peter
3;johan
6;piet
7;cheese
мой код на Python:
import random
create_bestand = open('fa_kluizen.txt')
bestand = open('fa_kluizen.txt', 'r')
line = bestand.readlines()
bestand.close
def main():
while True:
menu = input("""
Welkom bij het menu!
1: Ik wil weten hoeveel kluizen nog vrij zijn
2: Ik wil een nieuwe kluis
3: Ik wil even iets uit mijn kluis halen
4: Ik geef mijn kluis terug
5: ik wil stoppen
Maak je keuze van 1/5: """)
if menu == '1':
toon_aantal_kluizen_vrij()
elif menu == '2':
nieuwe_kluis()
elif menu == '3':
kluis_openen()
elif menu == '4':
kluis_teruggeven()
elif menu == '5':
break
else:
print("Je kan alleen de nummers 1,2,3,4,5 selecteren\nprobeer opnieuw")
print(type(main))
def toon_aantal_kluizen_vrij():
available_safe = 12 - len(line)
print(f'er zijn nog {available_safe} kluizen vrij ')
return available_safe
def nieuwe_kluis():
safenumbers = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
file = open('fa_kluizen.txt', 'r')
safes = file.readlines()
for safe in safes:
safe_split = safe.split(";")
for safenumber in safe_split:
if safenumber in safenumbers:
safenumbers.remove(safenumber)
if len(safenumbers) > 0:
safe_number = random.choice(safenumbers)
print(f'u heeft kluisnummer {safe_number} gekregen')
password = input('voer een wachtwoord in voor uw kluis: ')
appendsafe = open('fa_kluizen.txt', 'a')
appendsafe.write(f'\n{safe_number};{password}')
appendsafe.close()
print(f'uw Kluis is {safe_number} toegewezen!')
else:
print('Alle kluizen zijn al gebruikt.')
file.close()
def kluis_openen():
while True:
file = open('fa_kluizen.txt', 'r')
safes = file.readlines()
safenumber = input('voer uw kluisnummer hier in: ')
password = input('voer uw wachtwoord van uw kluis hier in: ')
safenumbercode = safenumber+';'+password
for safe in safes:
safe = safe.strip()
if safenumbercode == safe:
numbercode = True
break
else:
numbercode = False
if numbercode == True:
print('Kluis is geopend')
break
else:
print('De kluisnummer en/of wachtwoord is onjuist, probeer opnieuw.')
file.close()
# 2;peter
# 3;johan
# 6;piet
# 7;amk
def kluis_teruggeven():
while True:
file = open('fa_kluizen.txt', 'r+')
safes = file.readlines()
safenumber = input('voer uw kluisnummer hier in: ')
password = input('voer uw wachtwoord van uw kluis hier in: ')
safenumbercode = safenumber + ';' + password
for safe in safes:
safe = safe.strip()
if safenumbercode == safe:
numbercode = True
break
else:
numbercode = False
if numbercode == True:
if safe.strip("\n") != numbercode:
safe.write(safe)
print('Kluis is verwijderd')
break
else:
print('De kluisnummer en/of wachtwoord is onjuist, probeer opnieuw.')
file.close()
может кто-нибудь помочь мне:(
2 ответа
@mike67
у меня был один вопрос
в моем втором варианте, если вы создаете сейф, я написал \n, поэтому он начинает писать под ним, но если я открываю файл, первая строка пуста, потому что первый вариант говорит, что после использования 1 сейфа осталось 10 сейфов вместо 11
что я могу сделать, чтобы исправить эту проблему
def nieuwe_kluis():
safenumbers = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
file = open('fa_kluizen.txt', 'r')
safes = file.readlines()
for safe in safes:
safe_split = safe.split(";")
for safenumber in safe_split:
if safenumber in safenumbers:
safenumbers.remove(safenumber)
if len(safenumbers) > 0:
safe_number = random.choice(safenumbers)
print(f'u heeft kluisnummer {safe_number} gekregen')
password = input('voer een wachtwoord in voor uw kluis: ')
appendsafe = open('fa_kluizen.txt', 'a')
appendsafe.write(f'\n{safe_number};{password}')
appendsafe.close()
print(f'uw Kluis is {safe_number} toegewezen!')
else:
print('Alle kluizen zijn al gebruikt.')
file.close()
В функции удаления сейфа файл уже открыт, поэтому вы можете очистить файл и записать новый список сейфов без выбранного (удаленного) сейфа.
def kluis_teruggeven(): # delete safe
while True:
file = open('fa_kluizen.txt', 'r+')
safes = file.readlines()
safenumber = input('voer uw kluisnummer hier in: ')
password = input('voer uw wachtwoord van uw kluis hier in: ')
safenumbercode = safenumber + ';' + password
newlines = "" # new file contents
numbercode = False
for safe in safes:
safe = safe.strip()
if safenumbercode != safe:
newlines += safe + '\n' # keep this safe
else:
numbercode = True # found entry to be deleted
if numbercode == True:
file.truncate(0) # clear file
file.seek(0)
file.write(newlines) # write new contents
print('Kluis is verwijderd')
break
else:
print('De kluisnummer en/of wachtwoord is onjuist, probeer opnieuw.')
file.close()