ich versuche momentan eine Funktion zu erstellen, die alle Elemente (Strings) einer Liste nach Zahlenwerten durchsucht. Es geht letztendlich darum, mit einfachen Kriterien herauszufinden, ob die im String vorhandenen Zahlen (wenn überhaupt welche vorhanden) ein Datum sein können oder nicht. Mit datefinder geht das leider nicht, weil ich das deutsche Datumsformat brauche.
In meiner bisherigen Lösung hab ich jetzt das Problem, dass ich durch die ganzen Verschachtelungen die Variable deadline in der return-Anweisung nicht mehr aufrufen kann. Hat jemand eine Idee wie sich das beheben lässt?
Grundsätzlich reicht mir dieser "einfache" Ansatz, weil in der gesamten Liste nur ein richtiges Datum enthalten sein wird. Dieses gilt es eben herauszufiltern. Daher auch meine Idee nur Strings genauer anzuschauen, die 2 oder 3 Zahlenwerte enthalten.
Grundsätzlich sind immer wieder Probleme aufgetreten, wenn die Liste am Anfang die korrekten Datumswerte enthält und danach nur noch Elemente mit "falschen Voraussetzungen" kommen. Irgendwie fehlt glaube ich der Ausstieg aus der Schleife sofern das Datum erkannt wurde.
Vielleicht mach ich hier gerade auch nur triviale Anfängerfehler, aber mit meinen Grübeleien komme ich gerade einfach nicht weiter und hoffe, jemand kann mir ein paar Tipps geben. Wie man an meinem Code erkennen kann, ich arbeite noch nicht so lange mit Python

Code: Alles auswählen
def get_deadline(list):
# Keywords to find the month if it has been written-out
date_keywords = ["Januar", "Februar", "März", "April", "Mai","Juni",
"Juli", "August", "September", "Oktober", "November", "Dezember"]
# Find numbers in each string
for str in list:
digits = re.findall('([0-9]+)', str)
if len(digits) <= 1 or len(digits) > 3:
continue
else:
# Convert elements to make them comparable
digits = [int(str) for str in digits]
# Conditions to check if the numbers can be assumed as a date
format_one = digits[0] >= 1 and digits[0] <= 31 and digits[1] >= 1 and digits[1] <= 12 and digits[2] >= 2010
format_two = digits[0] >= 1 and digits[0] <= 31 and digits[1] >= 2010
date_format = format_one or format_two
# Ignore elements with wrong conditions
if date_format == False:
continue
else:
# Check the first possible date format
if len(digits) == 3:
# Convert values into a datetime-object
deadline = datetime.datetime(digits[2],digits[1],digits[0],23,59,59)
# Check the second possible date format
elif len(digits) == 2:
# Search for month in string and compare it to list of keywords
for month in date_keywords:
if re.search(month, str):
for i in range(1,12):
if month == date_keywords[i]:
# Replace the value of month with a digit and convert values into a datetime-object
new_month = i
# Convert values into a datetime-object
deadline = datetime.datetime(digits[1], new_month, digits[0],23,59,59)
break
return deadline