Ausgabeformat von os.stat ?

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
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Hi,
ich verstehe das Zeitstempelformat nicht, das os.stat liefert. Für die Datei mit dem Datum 07-05-2006 06:53 liefert os.stat[8] '1146977625'. Mache ich mit os.utime(path,(0,1146977625))
den Umkehrtest, dann ist das auch tatsächlich das Dateidatum. Nur kann ich keinen Zusammenhang zwischen der Zahlenreihe "1146977625" und dem Zeitstempel '07-05-2006 06:53' erkennen ?

Gruss, Seven
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Das sind die Sekunden, die seit dem 1.1.1970 vergangen sind!
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

snakeseven hat geschrieben:Nur kann ich keinen Zusammenhang zwischen der Zahlenreihe "1146977625" und dem Zeitstempel '07-05-2006 06:53' erkennen?
Hi Seven!

Du musst dir das Modul "time" ansehen. Dort sind die Funktionen zum Umwandeln von Zeitwerten drinnen.

Code: Alles auswählen

time.ctime(os.path.getctime(r"Pfad zur Datei"))
lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

murph hat geschrieben:Das sind die Sekunden, die seit dem 1.1.1970 vergangen sind!
Tatsächlich. Gebe ich os.utime (path, (0,1)) ein, bekomme ich als Datum 01-1-1970 01:00. Ich will die Uhrzeit von Files ändern. Das wird ja ein munteres Sekundenzählen :lol:

Gruss, Seven
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

gerold hat geschrieben:Du musst dir das Modul "time" ansehen. Dort sind die Funktionen zum Umwandeln von Zeitwerten drinnen.

Code: Alles auswählen

time.ctime(os.path.getctime(r"Pfad zur Datei"))
Das lese ich gerne und ist genau was ich suchte :P
Gruss, Seven
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

So lässt sich der Zeitstempel einer Datei manipulieren:

Code: Alles auswählen

import os,time,calendar

fd = time.localtime(os.stat(pfad)[8])            
# Uhrzeit im Zeitstempel der Datei in "pfad"

timestring = (fd[0],monat,tag,stunde-2,minute,fd[5],fd[6],fd[7],fd[8]) 
# 9-stelliger Tupel als Argument für calendar.timegm()
# monat,tag,stunde,minute = Integer
# stunde - 2 kompensiert 2 Stunden Differenz von localtime und gmtime

timestamp = calendar.timegm(timestring)   
# wandelt Tupel in Sekunden-Gesamtzeit

os.utime(pfad,(0,timestamp))   
# stetzt Zeitstempel der Datei neu
Gruss, Seven
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Hier war was, hat sich aber erledigt.
Seven
BlackJack

snakeseven hat geschrieben:

Code: Alles auswählen

timestring = (fd[0],monat,tag,stunde-2,minute,fd[5],fd[6],fd[7],fd[8]) 
# 9-stelliger Tupel als Argument für calendar.timegm()
# monat,tag,stunde,minute = Integer
# stunde - 2 kompensiert 2 Stunden Differenz von localtime und gmtime
Das ist recht fehleranfällig. Was ist wenn die alte Dateizeit Nachts um 1 war? Vielleicht auch noch an einem 1.3. in einem Schaltjahr oder zu Neujahr. Ich würde zum rechnen mit Datumsangaben lieber die `datetime` Objekte benutzen.

Code: Alles auswählen

import os
import time
from datetime import datetime, timedelta
delta = timedelta(hours=2)
file_time = datetime.fromtimestamp(os.path.getctime('test.py'))
new_timestamp = time.mktime((file_time - delta).timetuple())
os.utime('test.py', (new_timestamp, new_timestamp))
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

BlackJack hat geschrieben:Das ist recht fehleranfällig. Was ist wenn die alte Dateizeit Nachts um 1 war? Vielleicht auch noch an einem 1.3. in einem Schaltjahr oder zu Neujahr. Ich würde zum rechnen mit Datumsangaben lieber die `datetime` Objekte benutzen.
Siehste, das habe ich nicht bedacht :oops:. Werde gleich mal updaten.
Thanx, Seven
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

BlackJack hat geschrieben:Ich würde zum rechnen mit Datumsangaben lieber die `datetime` Objekte benutzen.
Das habe ich versucht, aber wie bringe ich den Monat unter, timedelta kennt keinen Parameter month ?

http://docs.python.org/lib/datetime-timedelta.html

Gruss,, Seven
Buell
User
Beiträge: 90
Registriert: Samstag 29. Oktober 2005, 14:17

der Fehler mit den -2 Stunden lässt sich natürlich leicht beheben, indem man die 2 Stunden erst nach dem umwandeln in Sekunden abzieht, also Minus 60x60x2 Sekunden....

Code: Alles auswählen

import os,time,calendar

fd = time.localtime(os.stat(pfad)[8])           
# Uhrzeit im Zeitstempel der Datei in "pfad"

timestring = (fd[0],monat,tag,stunde,minute,fd[5],fd[6],fd[7],fd[8])
# 9-stelliger Tupel als Argument für calendar.timegm()
# monat,tag,stunde,minute = Integer

timestamp = calendar.timegm(timestring)   
# wandelt Tupel in Sekunden-Gesamtzeit

timestamp -= 60*60*2
# stunde - 2 kompensiert 2 Stunden Differenz von localtime und gmtime

os.utime(pfad,(0,timestamp))   
# stetzt Zeitstempel der Datei neu
BlackJack

snakeseven hat geschrieben:
BlackJack hat geschrieben:Ich würde zum rechnen mit Datumsangaben lieber die `datetime` Objekte benutzen.
Das habe ich versucht, aber wie bringe ich den Monat unter, timedelta kennt keinen Parameter month ?
Natürlich nicht. Was ist denn ein Monat? Oder anders gefragt 31.12. minus ein Monat -- welcher Tag soll das sein?
Antworten