Aus Zeichenkette Datum erstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Elemack
User
Beiträge: 1
Registriert: Samstag 20. Februar 2021, 21:28

Hallo zusammen.
Ich möchte in ECODMS automatisch Kontoauszüge erfassen.
Auf dem Kontoauszug steht leider kein Datum sondern nur z.B. 10/2020.
Würde jetzt gerne daraus 01.10.2020 machen. Als Tag möchte ich immer den 1. nehmen. Monat und Jahr aus der Zeichenkette.
Der zu erkennende Text sieht immer so aus: Kontoauszug Nr. 10/2020
Zwischen Kontoauszug und Nr. gibt es einige Leereichen, genauso wie zwischen Nr. und der Monatsangabe.
Ich würde mich freuen wenn mir jemand sagt wie man das macht.
Danke schon mal im Voraus.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

So in etwa?

Code: Alles auswählen

from datetime import datetime

def get_datestring(text):
    date = datetime.strptime(text.split()[-1], "%m/%Y")
    return date.strftime("%d.%m.%Y")

print(get_datestring("Kontoauszug Nr. 10/2020"))
Benutzeravatar
DeaD_EyE
User
Beiträge: 1017
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Code: Alles auswählen

def parse_datestring(text):
    month, year = map(int, text.split("/"))
    return datetime.date(year, month, 1)


def localize_date(date):
    return date.strftime("%d.%m.%Y")
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@DeaD_EyE: warum sollte man nicht datetime.strptime benutzen, wenn es das gibt?
Benutzeravatar
DeaD_EyE
User
Beiträge: 1017
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Sirius3 hat geschrieben: Montag 22. Februar 2021, 14:00 @DeaD_EyE: warum sollte man nicht datetime.strptime benutzen, wenn es das gibt?
Wer redet von nicht sollen?

Es ist einfach nur ein anderer falscher Weg.
Witzig, dass niemanden aufgefallen ist, dass die Funktion nur den String "monat/jahr" verarbeiten kann, aber nicht mit "Kontoauszug " davor.
Mir missfällt z.B. das text.split()[-1]
Es mag auch nicht jeder Spinat-Pizza.

Aber das hat alles nichts mit der Methode strptime, strftime zu tun. Sie sind da und sollten auch verwendet werden.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Gut, aber wie soll man den Kontoauszug oder anderen Text davor sonst weg kriegen? Regex ginge noch und könnte dann sogar Text danach ignorieren. Dass es soviel sein muss, ging aus der ursprünglichen Frage jedoch nicht hervor. Bei split()[-1] weiß jeder mit Grundkenntnissen, dass der letzte Part behandelt wird, egal wieviel davor steht. Auch ohne Text davor klappt dieser Ansatz.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1017
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

snafu hat geschrieben: Dienstag 13. April 2021, 17:34 Regex ginge noch und könnte dann sogar Text danach ignorieren. Dass es soviel sein muss, ging aus der ursprünglichen Frage jedoch nicht hervor.
Regex ist mit Kanonen auf Spatzen schießen, bei einer so einfachen Aufgabe.
Da ist split oder rsplit schon die richtige Methode.
snafu hat geschrieben: Dienstag 13. April 2021, 17:34 Bei split()[-1] weiß jeder mit Grundkenntnissen, dass der letzte Part behandelt wird, egal wieviel davor steht. Auch ohne Text davor klappt dieser Ansatz.
Ändert aber nichts daran, dass ich das [-1] hässlich finde.

Anstatt das:

Code: Alles auswählen

# das maxsplit lasse ich mal drin
datum_text = text.split(maxsplit=1)[-1]
Bevorzuge ich eher das:

Code: Alles auswählen

*_, datum_text = text.rsplit(maxsplit=1)
PS: Wenn ich von rechts was brauche, nutze ich rsplit. Wenn ich von links etwas brauche, nutze ich split. Wenn ich weiß, dass ich nur 2 Elemente als Ergebnis benötige, nutze ich den Parameter maxsplit.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Und was soll * vor _?
Benutzeravatar
DeaD_EyE
User
Beiträge: 1017
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

* Ist ein Fehler.
Anstatt einen str, ist _ dann eine Liste mit einem str als einziges Element.

Dass * vor dem _ alles an übrig gebliebenen Elementen konsumiert, ist dir bekannt?
Ich kann mich nicht mehr erinnern wann es eingeführt worden ist, aber es müsste diese PEP sein: https://www.python.org/dev/peps/pep-3132/
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten