Seite 1 von 1

Alte Dateien löschen

Verfasst: Mittwoch 27. August 2003, 13:31
von HarryH
Hallo,

Ich habe eine kleine Funktion geschrieben die mir in einem Ordner automatisch die fünf zuletzt veränderten Programme behält und den Rest entfernt.

Code: Alles auswählen

import glob
import os
datum=[]
for i in glob.glob("*.py"):datum+=[os.path.getmtime(i)]
datum.sort()
for i in glob.glob("*.py"):    
    if os.path.getmtime(i) in datum[:-5]:        
        os.remove(i)
Meine Frage:
Kann man das auch kürzer schreiben?
Danke!

Harry

Re: Alte Dateien löschen

Verfasst: Mittwoch 27. August 2003, 14:08
von Voges
Hallo!
Dich stört sicherlich das zweimalige glob().
Hier mein Vorschlag:

Code: Alles auswählen

liste = [(os.path.getmtime(f),f) for f in glob.glob("*.py")]
liste.sort()
for (dummi,f) in liste[:-5]:
    print f     # bzw. remove()
(ohne Gewähr)
Jan

Nachtrag: Einen Unterschied gibt es im Verhalten. Wenn bei Deiner Methode mehrere Dateien das selbe Datum haben, überleben u.U. mehr als 5 Dateien (vielleicht erwünscht). Bei meiner Methode überleben immer nur 5 Dateien.

re:

Verfasst: Mittwoch 27. August 2003, 16:40
von HarryH
Hallo,

Danke für deinen Beitrag Jan!

Habe selbst noch eine Lösung gefunden!
Da die Zeichenanzahl des mit os.path.getmtime(path) ausgegebenen Sekundenwerts die nächsten ca 280 Jahre unverändert bleibt, folgender Code:

Code: Alles auswählen

datum=[]
for i in glob.glob("*.py"):datum+=[string.zfill(os.path.getmtime(i),10)+i]
datum.sort()
for i in datum[:-5]:print i #bzw os.remove()
Ciao Harry

Re: re:

Verfasst: Mittwoch 27. August 2003, 19:43
von hans
HarryH hat geschrieben:Da die Zeichenanzahl des mit os.path.getmtime(path) ausgegebenen Sekundenwerts die nächsten ca 280 Jahre unverändert bleibt, folgender Code:
Macht mich doch Neugierig. Auf welches OS ist das bezogen. Ich habe da so etwas im Hinterkopf, dass es bei allen UNIX Systemen 2048 zum Overflow beim Datum kommt. Oder sind meine Kenntnisse nicht mehr auf dem richtigen Stand?

Ich hoffe, dass das Rentenalter bis dahin nicht soweit angehoben wurde, dass ich das noch erlebe. :lol: Bis dahin wäre ich 95 :shock: ...Brille hab ich auf, wo ist der Stock....

UNIX Datumsueberlauf

Verfasst: Dienstag 9. September 2003, 13:38
von Qbi
hans hat geschrieben:Ich habe da so etwas im Hinterkopf, dass es bei allen UNIX Systemen 2048 zum Overflow beim Datum kommt. Oder sind meine Kenntnisse nicht mehr auf dem richtigen Stand?
Sind sie nicht. Es ist schon im Jahre 2038.
Hintergrund: Intern wird das Datum in Sekunden ab dem 1970-01-01 umgerechnet und in 2038 ist es dann eine Zehnerpotenz zuviel ...

Verfasst: Dienstag 9. September 2003, 17:51
von oenone
naja, bis dahin benutzen wohl schon die meisten 64bit oder 128bit rechner (oder was es dann gibt)...
und dadurch kann das datum noch weiter anwachsen.

auf bald
oenone

Verfasst: Sonntag 14. September 2003, 16:25
von Leonidas
Jaja, der Linux 64 Bit (x36-64) Kernel ist schon in entwicklung (oder gar fertig??)

Verfasst: Montag 15. September 2003, 17:40
von Qbi
Leonidas hat geschrieben:Jaja, der Linux 64 Bit (x36-64) Kernel ist schon in entwicklung (oder gar fertig??)
IMHO in Entwicklung oder weisst du genaueres?

Verfasst: Montag 15. September 2003, 18:35
von hans
Ich meine das Läuft schon (!?). Mir fehlt aber die nötige Hardware (und das passende Kleingeld dazu)

Aber wer lust hat, kann ja mal ein bisschen Googeln oder z. B. hier nachlesen: http://www.linuxia64.org/

Verfasst: Montag 15. September 2003, 18:48
von Dookie
nur für den Überlauf von nem 32bitwert wird das auch nix bringen. die 64bit beiehen sich auf den internen Adress und Datenbuss. ein 32bit-Integer bleibt auch auf einer 64bit-Maschine ein 32bit-Integer so wie ein 8bit-char auch bei unseren heutigen rechnern 8 Bit enthält.


Gruß

Dookie

Verfasst: Montag 15. September 2003, 20:04
von oenone
ja, aber der standard integer ist auf 64 bit maschinen eben 64 bit gross. immer so gross wie die adressierung.

auf bald
oenone

Verfasst: Montag 15. September 2003, 22:49
von Dookie
Hi Hans,

selbst auf dem C64 (8Bit) konntest mit 16 Bit Integern rechnen. einfach 2 8Bits zusammenschließen. Floats haben ja auch in der Long-Variante 128 Bit. auch übergrosse Integers sind heute schon unter Python2.3 verfügbar. Man schaltet dabei einfach mehrere 32Bit-Longwords hintereinander, überlauf wird eben ins höherwertige Lognword übertragen. Das rechnen geht im Prinzip wie beim Dezimalsystem mit Übertrag und so.


Gruß

Dookie

Verfasst: Montag 15. September 2003, 23:49
von hans
Wenn ich dann die Zeit mal wieder ein wenig zurückdrehe, dann frage ich mich allerdings, wie man den 32 bitigen Wert auf einen 16bit Prozzi verwaltet hat. Der muß doch da schon mehr wie 16 Bit gehabt haben.

Ich geb's ja zu, ich hab keine tiefgreifende Ahnung von Datentypen. Aber interessieren würde es mich trotzdem mal.