Formatierung Aktualisierungsdatum als JJJJMMTT

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
tomrause
User
Beiträge: 12
Registriert: Freitag 26. Februar 2021, 19:20

Hallo zusammen,
ich versuche aus dem aktulaisierungsdatum einer Datei einen String der folgendenermaßen aussieht: JJJJMMTT, also z.B. für den 26.04.2021 => 20210426.
Diesen String möchte ich als indikator für den Dateinamen eines Zip-File verwenden.

Mein Skript lieferrt mir aber nur den String für Monat bzw Tag, wenn diese <10, als 1-stellig zurück.
Würdet ihr mir bitte einen Hinweis geben, was ich falsch mache:
Danke
Tom

Code: Alles auswählen

# formatiere gmtime als string für Erweiterung Dateiname: Asugabeformat JJJJMMTT
#file_gmtime ist Parameter

import time, os # => wird in fertigem Skript auf die Hauptebene ausgelagert
def format_gmtime(file_gmtime):
    stamp_date=['']    
    
    mod_time=os.path.getmtime(file_gmtime)
    
    jjjj=str(time.gmtime(mod_time)[0])
    
    stamp_date.append(str(jjjj)) #Jahr als String an Liste anfügen
    
    mm=time.gmtime(mod_time)[1]
    if mm < 10:
        x='0'.join(str(mm))
    else:
        x=str(mm)
    print(x)
    
    stamp_date.append(str(x)) #Monat als String an Liste anfügen NUR 1-STELLIGE AUSGABE
    
    dd=time.gmtime(mod_time)[2] 
    if dd < 10:
        y='0'.join(str(dd))
    else:
        y=str(dd)

    stamp_date.append(str(y)) #Tag als String an Liste anfügen
        
    yyyymmdd=''.join(stamp_date) #Zusammenführen
   
    return yyyymmdd #Rückgabewert
Aufruf dann mit

Code: Alles auswählen

wert=format_gmtime(r'I:\MeinPfadZuMeiner\Datei')
Ich bitte um Hinweise
Danke
Tom
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

`file_gmtime` ist gar keine gmtime sondern ein Dateiname.
Du rufst drei mal `time.gmtime` auf, nur um jeweils einen Wert aus der Rückgabe zu benutzen. Das ist Verschwendung.
Was denkst Du, macht `join` und warum denkst Du, dass das beim Formatieren von Zahlen nützlich sein könnte. Ich hab ja schon oft was wie ›'0' + str(zahl)‹ gesehen, aber das noch nie.
Zum Formatieren von Zahlen benutzt man aber format-Strings.

Code: Alles auswählen

def format_gmtime(filename):
    modification_time = os.path.getmtime(filename)
    time_struct = time.gmtime(modification_time)
    return f"{time_struct.tm_year:04d}{time_struct.tm_mon:02d}{time_struct.tm_mday:02d}"
Man arbeitet aber gar nicht mit dem time-Modul, wenn es nicht unbedingt nötig ist, datetime ist da viel komfortabler:

Code: Alles auswählen

import datetime
import os

def format_gmtime(filename):
    modification_time = datetime.datetime.fromtimestamp(os.path.getmtime(filename))
    return f"{modification_time:%Y%m%d}"
tomrause
User
Beiträge: 12
Registriert: Freitag 26. Februar 2021, 19:20

Guten Mogen Sirius,
danke für deine Hinweise.
Sirius3 hat geschrieben: Montag 26. April 2021, 12:25 `file_gmtime` ist gar keine gmtime sondern ein Dateiname.
Das ist korrekt, es sollte ein Arbeitsname für das File sein, dessen Aktualisierungsdatum ich haben will.
Sirius3 hat geschrieben: Montag 26. April 2021, 12:25 Du rufst drei mal `time.gmtime` auf, nur um jeweils einen Wert aus der Rückgabe zu benutzen. Das ist Verschwendung.
<ironie>Verschwendung? Aber wir haben's doch... </ironie>
Scherz beiseite. Ich dachte den zurückgelieferten gmtime-Wert kann ich nur so in Jahr, Monat und Tag aufteilen.
Sirius3 hat geschrieben: Montag 26. April 2021, 12:25 Was denkst Du, macht `join` und warum denkst Du, dass das beim Formatieren von Zahlen nützlich sein könnte. Ich hab ja schon oft was wie ›'0' + str(zahl)‹ gesehen, aber das noch nie.
Ich wollte eigentlich join zum verknüpfen von strings anwenden, da mir das '+' nicht geheuer ist. Wäre denn '0'+str(zahl) machbar oder schon Blasphemie?
Sirius3 hat geschrieben: Montag 26. April 2021, 12:25 Man arbeitet aber gar nicht mit dem time-Modul, wenn es nicht unbedingt nötig ist, datetime ist da viel komfortabler:
Danke für den Hinweis, das ist sehr viel eleganter und liefert vor allem das gewünschte Ergebnis. Für mich ist dieses Vorgehen aber (noch) nicht selbstverständlich, dafür bin ich noch zu neu in dem Thema.

Du hast mir sehr geholfen.
Danke
Tom
Antworten