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

Volle Verzeichnisse löschen

Beitragvon Stifferle » Montag 9. Mai 2005, 13:28

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

Nachtrag

Beitragvon Stifferle » Montag 9. Mai 2005, 13:51

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 9. Mai 2005, 14:10

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

re:

Beitragvon HarryH » Montag 9. Mai 2005, 14:10

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: re:

Beitragvon Leonidas » Montag 9. Mai 2005, 14:13

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 Modvoice
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Montag 9. Mai 2005, 14:24

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 9. Mai 2005, 14:31

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 Modvoice
Stifferle

Danke!

Beitragvon Stifferle » Montag 9. Mai 2005, 14:50

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

Beitragvon BlackJack » Montag 9. Mai 2005, 22:39

``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])

Beitragvon mawe » Dienstag 10. Mai 2005, 06:23

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 10. Mai 2005, 12:31

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 Modvoice
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Dienstag 10. Mai 2005, 12:59

Richtig! Und vielleicht auch anders nennen. Soll das eine Abkürzung für shell utils sein?
BlackJack

Beitragvon BlackJack » Dienstag 10. Mai 2005, 21:47

Ja ist damit gemeint.
azami1986
User
Beiträge: 20
Registriert: Mittwoch 29. Oktober 2008, 10:35

Beitragvon azami1986 » Mittwoch 14. Januar 2009, 15:46

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

Beitragvon Pekh » Mittwoch 14. Januar 2009, 15:50

:? 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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder