Alte Dateien löschen

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
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

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
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

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.
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

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
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

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....
Qbi
User
Beiträge: 57
Registriert: Mittwoch 25. Juni 2003, 14:04
Kontaktdaten:

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 ...
Jens Kubieziel http://www.kubieziel.de
http://www.kubieziel.de/pythonwiki/
oenone
User
Beiträge: 75
Registriert: Mittwoch 27. August 2003, 14:39
Wohnort: 49°17'28N, 8°15'57E
Kontaktdaten:

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Jaja, der Linux 64 Bit (x36-64) Kernel ist schon in entwicklung (oder gar fertig??)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Qbi
User
Beiträge: 57
Registriert: Mittwoch 25. Juni 2003, 14:04
Kontaktdaten:

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?
Jens Kubieziel http://www.kubieziel.de
http://www.kubieziel.de/pythonwiki/
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

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/
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
oenone
User
Beiträge: 75
Registriert: Mittwoch 27. August 2003, 14:39
Wohnort: 49°17'28N, 8°15'57E
Kontaktdaten:

ja, aber der standard integer ist auf 64 bit maschinen eben 64 bit gross. immer so gross wie die adressierung.

auf bald
oenone
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

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.
Antworten