Seite 1 von 1

String im ctime-Format zu einem Datumsobjekt

Verfasst: Mittwoch 17. Februar 2010, 14:35
von may24
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

Verfasst: Mittwoch 17. Februar 2010, 14:42
von cofi
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.

Verfasst: Mittwoch 17. Februar 2010, 15:10
von may24
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 ?

Verfasst: Mittwoch 17. Februar 2010, 15:51
von cofi
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.

Verfasst: Mittwoch 17. Februar 2010, 17:16
von may24
... 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 ?

Verfasst: Mittwoch 17. Februar 2010, 17:34
von cofi
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'
>>> 

Verfasst: Mittwoch 17. Februar 2010, 18:14
von may24
... unglaublich aber es scheint zu funktionieren. :shock:

...hm viel geändert hab ich nicht, bis auf den "import" Teil ...

Verfasst: Mittwoch 17. Februar 2010, 18:46
von Dav1d
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'

Verfasst: Freitag 19. Februar 2010, 12:51
von may24
Vielen Dank für die Hilfe :D