Volle Verzeichnisse 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
Stifferle

Hi,

ich suche nach einer einfachen Möglichkeit Verzeichnisse zu löschen in denen unter Umständen auch etwas drin steht (evtl sogar weitere Verzeichnisse mit weiterem Inhalt). Als Lösung ist mir bis jetzt nur eingefallen in jedem Verzeichniss alle Dateien aufzulisten, diese zu löschen, dann das Verzeichnis zu löschen....usw.
Diese Lösung erscheint mir aber viel zu umständlich :?

Jemand ne Idee/Vorschlag/Tip??

Danke schonmal im Vorraus
Gruß
Stifferle
Stifferle

Hi,

vielleicht ist noch zu erwähnen das ich den Befehl rmdir() und auch den Befehl removedirs() probiert habe, aber beide schmeißen eine Exception wenn der Ornder nicht leer ist.

also im Prinzip brauch ich nur etwas wieremovedirs() das die Dateien trotzdem löscht...gibt es sowas???

Gruß
Stifferle
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Aus einer alten pywin und Python 2.2 Dokumentation , etwas angepasst, so dass es auch ohne pywin32 geht:

Code: Alles auswählen

import os

def del_dir(path):
    for file in os.listdir(path):
        file_or_dir = os.path.join(path,file)
        if os.path.isdir(file_or_dir):
            del_dir(file_or_dir)
        else:
            os.remove(file_or_dir)

        os.rmdir(path)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

Hi,

Unter Windows geht folgende Möglichkeit:

Code: Alles auswählen

root = "C:\Programme\New"
os.popen('rd /s /q "%s"' % root)
Dabei wird der Windows-CMD-Befehl abgegeben und ausgeführt.

Edit (Leonidas): Code in Python-Tags gesetzt.
Gruß, Harry
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

HarryH hat geschrieben:Unter Windows geht folgende Möglichkeit:
[snip]
Dabei wird der Windows-CMD-Befehl abgegeben und ausgeführt.
Warum sowas machen wenn man auch Pythons eigene Funktionen nutzen kann, die zudem noch unter anderen OSen laufen? (Ja, unter Linux und Co hätte man rm -r nehmen können, aber warum?)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi Leonidas!

Code: Alles auswählen

import os

def del_dir(path):
    for fil in os.listdir(path):
        file_or_dir = os.path.join(path,fil)
        if os.path.isdir(file_or_dir):
            del_dir(file_or_dir)
        else:
            os.remove(file_or_dir)
    os.rmdir(path)
So funktionierts ;) (und seit wann nennen wir eine Variable file? :)

Gruß, mawe
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

mawe hat geschrieben:(und seit wann nennen wir eine Variable file? :)
Seitdem wir (resp. ich) zu blöd sind (bin), uns (mir) den Quellcode des Beispiels genauer anzusehen... aje, sorry, normalerweise achte ich drauf.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Stifferle

Hallo,

vielen, vielen Dank für eure Hilfe. Obwohl ich sagen muss das HarryH's Lösung einen gewissen Reiz auf mich ausübt (ich sag nur 'Quick n Dirty' :wink: ), hab ich doch die Lösung von Leonidas übernommen.

Funktioniert tadellos, natürlich erst mit der Korrektur von mawe!

Also nochmal vielen Dank und viel Spaß noch
Grüße
Stifferle
BlackJack

``shutil.rmtree(path)`` ist viel kürzer und funtkioniert unter allen Plattformen.
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi Blackjack!

Stimmt, aber das Modul muss man auch erst mal kennen ;) Mir ist das noch nie aufgefallen, hat aber auch keinen sehr einleuchtenden Namen :)

NACHTRAG: Also irgendwie hätte man die paar Funktiönchen von shutil auch noch in os packen können. :?

Gruß, mawe
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

mawe hat geschrieben:NACHTRAG: Also irgendwie hätte man die paar Funktiönchen von shutil auch noch in os packen können. :?
Oder lieber andersrum, die Dateisachen aus os in shutil.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Richtig! Und vielleicht auch anders nennen. Soll das eine Abkürzung für shell utils sein?
azami1986
User
Beiträge: 20
Registriert: Mittwoch 29. Oktober 2008, 10:35

Hallo Leute,

kann es sein, dass folgender Funktion lediglich alle Dateien in der ersten ebene löscht?

Code: Alles auswählen

import os

def del_dir(path):
    for fil in os.listdir(path):
        file_or_dir = os.path.join(path,fil)
        if os.path.isdir(file_or_dir):
            del_dir(file_or_dir)
        else:
            os.remove(file_or_dir)
    os.rmdir(path)
Ich habe einen Verzeichnis, und in ihr sind weitere Verzeichnisse und Daten enthalten. Wie kann ich alle Unterverzeichnisse und Dateien löschen bzw. wie müsste ich den Code von Leonidas erweitern?

PS: Bin Windowsnutzer
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

:? Lies dir bitte noch mal alle Beiträge zu diesem Thema gründlich durch. Dann wirst du eine sehr schöne, saubere und kurze Lösung finden.
azami1986
User
Beiträge: 20
Registriert: Mittwoch 29. Oktober 2008, 10:35

Danke für die schnelle Antwort, jedoch möchte ich es nicht mit

Code: Alles auswählen

shutil.rmtree(path)
lösen, da ich selber python 2.5 benutze. Gibts da keine Allgemeine Lösung, wo man es auch in Python 2.5 macht?
azami1986
User
Beiträge: 20
Registriert: Mittwoch 29. Oktober 2008, 10:35

Problem gelöst :-) Trotzdem Danke
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Man macht es in Python 2.5 genau so, weil die Funktion nicht entfernt wurde.

http://docs.python.org/library/shutil.h ... til.rmtree (ja, das ist 2.6 Doku)
Antworten