Seite 1 von 1

rekursives löschen mit Abfrage

Verfasst: Mittwoch 12. März 2008, 19:55
von feldmaus
Hallo Alle,

wollte mal mein selbst modifiziertes Skript veröffentlichen,

Es müßte sowohl unter Linux als auch Windows laufen.

Das Skript sucht nach *.pyc Dateien rekursiv ab dem angegebenen
Verzeichnis und fragt ob sie gelöscht werden,

Code: Alles auswählen

#!/usr/bin/env python2.5
#
#loeschenPyc.pyw
#
from sys import *
from os import *
from os.path import *
from re import *

class suchRobot(object):
    def __init__(self,  wurzel):
        self.wurzel = wurzel
        self.endung = compile('\w*\.pyc\Z')
    
    def suche(self, arg, verzeichnis, dateien):
        #Suche nach Dateien die das Suchwort enthalten
        chdir(verzeichnis)
        for datei in dateien:
            if isfile(datei):
                if self.endung.match(datei):
                    print "Soll ", datei," geloescht werden?(j) "
                    antwort = stdin.readline()
                    if antwort == 'j\n':
                        try:
                            remove(datei)
                            print "Datei ",  datei, " geloescht!!!"
                        except:
                            print "Konnte Datei ",datei, "nicht loeschen."
                    else:
                        print "Datei ",  datei, " wurde nicht geloescht!"
    
    def durchsuche(self):
        walk(self.wurzel,  self.suche,  None)
    
workDir = getcwd()
bot = suchRobot(workDir)
bot.durchsuche()
Ich hatte mir Ideen aus meinem Buch genommen und den Rest gut umgeändert.

Grüße Markus

Verfasst: Mittwoch 12. März 2008, 19:59
von feldmaus
Ich habe bemerkt es dürfen keine Leerzeichen im Dateinamen enthalten sein.

Verfasst: Mittwoch 12. März 2008, 20:16
von EyDu
Na du willst doch bestimmt auch kritik:

- Lass diese *-importe
- Warum verwendest du eine Klasse, wenn eine einfache Funktion es genau so tut?
- Ein "except", welches die abzufangenden Exceptions nicht einschränkt ist eine schlechte Idee.
- Wird eine Datei nach "for datei..." und vor "if isfile..." gelöscht (oder sonst wie blockiert), werden von dir keine Fehler abgefangen.
- Der Vollständigkeit halber: Die vermischung von Logik und Ausgabe finde ich bei so einem einfachen Script noch nicht so gravierend.
- Eine Meldung, dass eine Datei nicht gelöscht wurde wenn man "n" eingibt ist etwas überflüssig.

Verfasst: Mittwoch 12. März 2008, 20:31
von feldmaus
EyDu hat geschrieben:- Ein "except", welches die abzufangenden Exceptions nicht einschränkt ist eine schlechte Idee.
Welche Exceptions könnte bei remove() auftreten?

Verfasst: Mittwoch 12. März 2008, 21:12
von meneliel
feldmann_markus hat geschrieben:
EyDu hat geschrieben:- Ein "except", welches die abzufangenden Exceptions nicht einschränkt ist eine schlechte Idee.
Welche Exceptions könnte bei remove() auftreten?
... probieren ... so mach ich das immer ... wenn ich wisen will welche exception auftreten kann, tu ich alles, damit eine auftritt...

Verfasst: Mittwoch 12. März 2008, 21:47
von Leonidas
Hmm, also ich schreib mir für sowas immer kleine Shell-Einzeiler mit ``find``. Fürs Lernen - warum nicht.

Code: Alles auswählen

find . -name '*.pyc' -exec rm -i {} \;

Verfasst: Mittwoch 12. März 2008, 23:43
von EyDu
feldmann_markus hat geschrieben:Welche Exceptions könnte bei remove() auftreten?
Schon mal in die Dokumentation geschaut?