Seite 1 von 1

Formatierung Aktualisierungsdatum als JJJJMMTT

Verfasst: Montag 26. April 2021, 12:02
von tomrause
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')

Re: Formatierung Aktualisierungsdatum als JJJJMMTT

Verfasst: Montag 26. April 2021, 12:25
von Sirius3
`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}"

Re: Formatierung Aktualisierungsdatum als JJJJMMTT

Verfasst: Dienstag 27. April 2021, 08:01
von tomrause
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