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.
Aus Zeichenkette Datum erstellen
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"))
- DeaD_EyE
- User
- Beiträge: 1037
- 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
- DeaD_EyE
- User
- Beiträge: 1037
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
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
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.
- DeaD_EyE
- User
- Beiträge: 1037
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Regex ist mit Kanonen auf Spatzen schießen, bei einer so einfachen Aufgabe.
Da ist split oder rsplit schon die richtige Methode.
Ä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]
Code: Alles auswählen
*_, datum_text = text.rsplit(maxsplit=1)
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
- DeaD_EyE
- User
- Beiträge: 1037
- 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/
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