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

Ausgabeformat von os.stat ?

Beitragvon snakeseven » Sonntag 7. Mai 2006, 14:42

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:

Beitragvon murph » Sonntag 7. Mai 2006, 14:49

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

Re: Ausgabeformat von os.stat ?

Beitragvon gerold » Sonntag 7. Mai 2006, 15:00

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

Beitragvon snakeseven » Sonntag 7. Mai 2006, 15:03

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

Re: Ausgabeformat von os.stat ?

Beitragvon snakeseven » Sonntag 7. Mai 2006, 18:04

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

Beitragvon snakeseven » Sonntag 7. Mai 2006, 20:21

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

Beitragvon snakeseven » Sonntag 7. Mai 2006, 23:02

Hier war was, hat sich aber erledigt.
Seven
BlackJack

Beitragvon BlackJack » Montag 8. Mai 2006, 00:32

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

Beitragvon snakeseven » Montag 8. Mai 2006, 11:29

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

Beitragvon snakeseven » Dienstag 9. Mai 2006, 09:07

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

Beitragvon Buell » Dienstag 9. Mai 2006, 13:43

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

Beitragvon BlackJack » Mittwoch 10. Mai 2006, 21:40

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?

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]