как удалить строку из текстового файла в 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()
Другие вопросы по тегам