String im ctime-Format zu einem Datumsobjekt

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
may24
User
Beiträge: 27
Registriert: Montag 7. September 2009, 17:14

Hallo zusammen.

Ich habe hier folgernden Probelm. Ich möchte eine Liste von Dateien aus einem bestimmten Verzeichniss erstellen die zum Zeitpunkt X (fertig)geschrieben wurden.

Dafür habe ich folgenden code benutzt:

Code: Alles auswählen

#!/usr/bin/python

import os

from time import *
from stat import *
from datetime import *

for root, dirs, files in os.walk('/tmp/trace'):
        for item in files:
                FullPathName = os.path.join(root,item)
                FileDate = os.stat(FullPathName)[ST_CTIME]
                print datetime.strptime(FileDate,"%Y-%m-%d")
Wie man sieht geht es erst mal darum das Datum der einzelnen Files angezeigt zu bekommen ... aussortieren später.
Das "os.stat(FullPathName)[ST_CTIME]" liefert mir auch den Zeitstempel, aber nur im epoch Format. Ich möchte aber "%Y-%m-%d".

Wenn ich den obrigen Code ausführe bekomme ich:
AttributeError: type object 'datetime.datetime' has no attribute 'strptime'
Und nun das Große Problem: Python ver. 2.3 (only!) RedHat Linux rel 4 Nahant ( Update 8 ) - Kernel 2.6.9-89.0.16.Elsmp (64bit)

Jemand 'ne Idee
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Library Reference 2.3.5 hat geschrieben:strftime(format)
Return a string representing the date and time, controlled by an explicit format string. See the section on strftime() behavior.
Damit solllte es funktionieren ;)

Und Finger weg von *-importen. Ich war erst versucht das darauf zu schieben.
may24
User
Beiträge: 27
Registriert: Montag 7. September 2009, 17:14

cofi hat geschrieben:
Library Reference 2.3.5 hat geschrieben:strftime(format)
Return a string representing the date and time, controlled by an explicit format string. See the section on strftime() behavior.
Damit solllte es funktionieren ;)
Leider Nein.

Code: Alles auswählen

  print strftime("%Y-%m-%d",FileDate)
TypeError: argument must be 9-item sequence, not int
Und Finger weg von *-importen. Ich war erst versucht das darauf zu schieben.
Warum ... wenn du das sagst hat das natürlich 'n Grund aber welchen ?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Faellt dir nicht auf, dass die Funktionssignaturen unterschiedlich sind?
Versuch mal folgendes:

Code: Alles auswählen

print datetime.datetime.fromtimestamp(FileDate).strftime("Y-%m-%d")
(Wenn ich mir das anschau schreibt man fast lieber eine eigene Funktion ...)

Das Problem bei *-importen ist, dass du dir den kompletten Namensraum aus dem importieren Model holst und andere sachen ueberschreibst, generell solltest du mal einen Blick auf PEP8 werfen.
may24
User
Beiträge: 27
Registriert: Montag 7. September 2009, 17:14

... den Namensraum hab ich (in diesem Falle) absichtlich komplett mitimportiert damit auch nix vergessen wird. Denn:

Code: Alles auswählen

print datetime.datetime.fromtimestamp(FileDate).strftime("Y-%m-%d")
AttributeError: type object 'datetime.datetime' has no attribute 'datetime'
Ich glaub so kommen wir nicht weiter. Gibt es denn keine andere Möglichkeit das c_time des Files auszugeben ?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Das war ein Wink mit dem Zaunpfahl, damit "nichts vergessen wird" ist ein ganz schlechtes Argument, denn es wird immer alles importiert, aber im eigenen Namensraum gelassen.
Bei mir funktioniert es, zugegeben 2.6, aber da hat sich nichts geaendert:

Code: Alles auswählen

>>> import datetime
>>> import os
>>> import stat
>>> fname = os.path.expanduser("~/test")
>>> date = os.stat(fname)[stat.ST_CTIME]
>>> dt = datetime.datetime.fromtimestamp(date)
>>> dt.strftime("%Y-%m-%d")
'2010-02-17'
>>> 
may24
User
Beiträge: 27
Registriert: Montag 7. September 2009, 17:14

... unglaublich aber es scheint zu funktionieren. :shock:

...hm viel geändert hab ich nicht, bis auf den "import" Teil ...
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Ja, weil du einen "Sternchen-import" hattest, war ein "datetime" zu viel da

Code: Alles auswählen

>>> import datetime
>>> print datetime.datetime.fromtimestamp(283734923.12).strftime("%Y-%m-%d")
1978-12-29
>>> del datetime
>>> from datetime import *
>>> print datetime.datetime.fromtimestamp(283734923.12).strftime("%Y-%m-%d")
Traceback (most recent call last):
  File "<input>", line 1, in <module>
AttributeError: type object 'datetime.datetime' has no attribute 'datetime'
the more they change the more they stay the same
may24
User
Beiträge: 27
Registriert: Montag 7. September 2009, 17:14

Vielen Dank für die Hilfe :D
Antworten