Konvertierung String->Date

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
WLemmy
User
Beiträge: 3
Registriert: Montag 28. Juni 2021, 20:37

Hallo,

ich habe aus einem Dateinamen einen Teil herausgetrennt (20210204), das ein Datum repräsentiert und will das konvertieren:

Code: Alles auswählen

part = dateiname[int(5:13]
dateidatum = datetime.strptime(part, "%Y%m%d")
als Fehler erhalte ich:
bei der Verarbeitung ist ein Fehler aufgetreten (<class 'TypeError'>, TypeError('must be str, not datetime.datetime',), <traceback object at 0x7f3f5a20d9c8>)

und ich habe keinen Plan warum. Part ist vom Typ Str. Kann mir jemand auf die Sprünge helfen?

Grüße
Lemmy
Benutzeravatar
__blackjack__
User
Beiträge: 14056
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@WLemmy: Bitte den kompletten, tatsächlich relevanten Code zeigen, mit dem kompletten Traceback. Das gezeigte kommt nicht am Compiler vorbei weil die erste Zeile zu einem Syntaxfehler führt.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
dirk009
User
Beiträge: 27
Registriert: Donnerstag 3. Juni 2021, 21:49

Hallo @WLemmy,

so wandelt man den String '20210204' in ein datetime-Objekt um und wieder zurück in einen String:

Code: Alles auswählen

>>> from datetime import datetime
>>> date = datetime.strptime('20210204', '%Y%m%d')
>>> date.strftime('%d.%m.%Y')
'04.02.2021'
Cheers,
Dirk
WLemmy
User
Beiträge: 3
Registriert: Montag 28. Juni 2021, 20:37

Servus, danke für Eure Unterstützung.
hier der Auszug des Logging (nicht gekürzt)!
4043-INFO-Datei /home/entwickler/projekt/working/vvtupdate/Testdaten/20210204/DC20_20210204xyz.csv
4043-INFO-DC20_20210204xyz.csv
4043-INFO-20210204
4043-ERROR-bei der Verarbeitung ist ein Fehler aufgetreten (<class 'TypeError'>, TypeError('must be str, not datetime.datetime',), <traceback object at 0x7fc90b9bc9c8>)
und hier der "gesamte" Code, diesmal nicht abgetippt und vereinfacht:

Code: Alles auswählen

  for item in konfig.FileTypes:
    dateiliste = glob.glob(konfig.ImportDirectory + '/' + item.FileMask)
    logging.info('Dateiliste: ' + str(dateiliste)) 
    for datei in dateiliste:
        with open(datei, encoding='iso-8859_1') as csv_datei:
            reader = csv.reader(csv_datei, delimiter=item.Delimiter)
            logging.info('Datei ' + datei) 
            dateiname = os.path.basename(datei)
            logging.info(dateiname) 
            part = dateiname[int(item.FileDateFrom):int(item.FileDateTo)]
            logging.info(part) 
            dateidatum = datetime.strptime(part, '%Y%m%d')
            logging.info(dateiname + ' ' + dateidatum) 
konfig.FileTypes ist Ergebnis einer Json-Konfiguration mit den Angaben:

Code: Alles auswählen

 "FileDateFrom": "5", "FileDateTo": "13",
jetzt ne Idee, warum hier der Fehler kommt?
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Ohne Traceback, der aussagt, in welcher Zeile der Fehler auftritt, kann man nur sagen: du verwendest irgendwo ein datetime.datetime-Objekt, wo du eigentlich eine Zeichenkette verwenden solltest. Zum Beispiel bei dem Vesuch zu loggen. Da stückelst du eine Zeichenkette mit + zusammen (was man in Python nicht tut, stichwort "Stringformatierung") und "dateidatum" ist keine Zeichenkette. Aber auch da müsste die Fehlermeldung anders lauten.

Du musst also den kompletten Traceback zeigen - und die Stelle an der der Fehler auftritt.
WLemmy
User
Beiträge: 3
Registriert: Montag 28. Juni 2021, 20:37

Danke für deine Unterstützung. Fehler war natürlich nicht in der Zeile mit der Konvertierung sondern in der nächsten Zeile mit der Logausgabe. Interessant wie man sich in was verrennen kann.
Antworten