rekursives löschen mit Abfrage

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

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
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Ich habe bemerkt es dürfen keine Leerzeichen im Dateinamen enthalten sein.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

EyDu hat geschrieben:- Ein "except", welches die abzufangenden Exceptions nicht einschränkt ist eine schlechte Idee.
Welche Exceptions könnte bei remove() auftreten?
meneliel
User
Beiträge: 256
Registriert: Montag 25. Juni 2007, 08:35
Kontaktdaten:

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

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 {} \;
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

feldmann_markus hat geschrieben:Welche Exceptions könnte bei remove() auftreten?
Schon mal in die Dokumentation geschaut?
Antworten