Variablennamen schreibt man komplett klein, Funktionsnamen ebenso.
Die Klammern um die if-Bedingungen sind überflüssig und können weg.
Benutze keine kryptischen Abkürzungen. Was ist eine "Datei im Namen"?
Wenn man soetwas wie "nicht gefunden" zurückgeben will, benutzt man None und keinen leeren String.
Strings stückelt man nicht mit + zusammen, sondern benutzt f-Strings.
Die Mischung von Deutsch und Englisch macht das Lesen insgesamt schwieriger.
Datei-Objekte sind Iteratoren. Eine for-Schleife wäre also viel Lesbarer als Deine while-Schleife.
curDate ist im zweifel nicht definiert. `writelines` dazu zu benutzen, um eine Zeile Zeichenweise zu schreiben, ist quatsch.
Das ganze sähe dann so aus:
Code: Alles auswählen
def extract_date(line):
filtered_parts = fnmatch.filter(line.split(), '??.??.????')
if filtered_parts:
# take the first one
return filtered_parts[0]
# date not found
return None
...
current_date = "???"
with open(input_filename, "r", encoding="UTF-8") as lines:
for line in lines:
new_date = extract_date(line)
if new_date:
current_date = new_date
output_file.write(f"{current_date} {line}")
Das prüft aber nicht, ob die Fragezeichen auch wirklich ein Datum bilden.
Das ganze mit regulärem Ausdruck:
Code: Alles auswählen
def extract_date(line):
match = re.search(r"[0123]\d\.[01]\d\.\d{4}", line)
return match.group(0) if match else None
Prüft zwar auch nicht auf ein korrektes Datum, zumindest aber, dass es sich um Ziffern handelt.