Zeile aus Datei auslesen mit Mindestlänge
Verfasst: Sonntag 2. Oktober 2022, 07:56
Hallo,
meine Frage ist:
Ich versuche aus einer Datei mit einer Wortliste eine bis mehrere Zeile auszulesen.
Dabei soll aber die jeweilige Zeile mindestens x Zeichen haben.
Siehe unten beim "while" und "mindestlaenge"
Leider krieg ich es nicht hin. Muss ich da eine Rekursion machen, also daraus eine Funktion machen und immer wieder aufrufen bis es klappt? Lieg ich da richtig, oder geht das ohne Rekursion?
Aktuell geht es nur solange Zeilen mit der entsprechenden Länge gefunden wurde ansonsten wird abgebrochen. Ich steh echt auf dem "Schlauch"
meine Frage ist:
Ich versuche aus einer Datei mit einer Wortliste eine bis mehrere Zeile auszulesen.
Dabei soll aber die jeweilige Zeile mindestens x Zeichen haben.
Siehe unten beim "while" und "mindestlaenge"
Leider krieg ich es nicht hin. Muss ich da eine Rekursion machen, also daraus eine Funktion machen und immer wieder aufrufen bis es klappt? Lieg ich da richtig, oder geht das ohne Rekursion?
Aktuell geht es nur solange Zeilen mit der entsprechenden Länge gefunden wurde ansonsten wird abgebrochen. Ich steh echt auf dem "Schlauch"
Code: Alles auswählen
def passwort_erzeugen():
label_erzeugtes_passwort.configure(bg="SystemButtonFace")
entry_erzeugtes_passwort.configure(bg="white")
# aus einer Wörterliste
time_start = datetime.now()
if notebook_art_passwort.index("current") == 1:
trennzeichen = str(entry_trennzeichen.get())
mindestlaenge = int(spinbox_mindestlaenge_worter.get())
anzahl_worter = int(spinbox_anzahl_worter.get())
if entry_wortliste.get() == "":
messagebox.showerror("Fehler", "es wurde keine Wortliste angegeben")
return
wortliste = entry_wortliste.get()
word_list = []
fileencoding = "utf-8"
# lese die datei in eine liste zeile für zeile
# noinspection PyUnusedLocal
with open(wortliste) as f:
words = [line.strip() for line in codecs.open(wortliste, "r", fileencoding)]
tmpcount = 1
while tmpcount <= anzahl_worter:
s = random.choice(words)
if len(s) >= mindestlaenge:
print(s)
word_list.append(s)
tmpcount = tmpcount + 1
else:
#messagebox.showerror("Fehler", "Mindestlänge nicht erreicht, es wird abgebrochen")
return
s = trennzeichen.join(word_list)
# zufällige Zahl zwischen 0 und 9 am Ende des Passwortes anfügen
if var_zahl_am_ende.get():
zuf_zahl = str(random.randint(0, 9))
s = s + zuf_zahl