shutil.rmtree

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
frabron
User
Beiträge: 306
Registriert: Dienstag 31. März 2009, 14:36

Hallo,

ich versuche mit shutil.rmtree einen kompletten Verzeichnispfad zu löschen. Doch leider klappt das nicht wie gewünscht:

Code: Alles auswählen

    # delete mapset with old data
    mapset_path = os.path.normpath(os.path.join(gisenv['GISDBASE'], MAPSET))
    
    try:
        shutil.rmtree(mapset_path)
    except OSError, err:
        print "Could not delete Mapset %s" % mapset_path
        print err
gibt mir
Could not delete Mapset D:\brfr\grassdata\SEO_WIND_CALC
[Error 3] The system cannot find the path specified: 'D:\\brfr\\grassdata\\SEO_WIND_CALC/*.*'
Irgendeine Idee, warum shutil.rmtree den Pfad so verhackstückt? Python ist 2.5.x unter Windows (XP). Das mit dem Slash (/) kann ja nicht gehen. Im CMD hält Windows das für einen Switch ...

Fängt man die Exception nicht ab, dann sieht man, dass os.listdir in shutils.py als letzte Zeile in dem Fehlerstack steht. Mit dem oben gezeigten Pfad kann das wie gesagt auch nicht funktionieren.

Grüsse

Frank
lunar

Nicht direkt zum Problem, doch "/" ist unter Windows nur ungewöhnlich, aber ansonsten völlig äquivalent zu "\".
problembär

Mit dem oben gezeigten Pfad kann das wie gesagt auch nicht funktionieren.
Bin nicht sicher (bzgl. os.listdir()), vielleicht geht's doch: Probier's mal bitte.

Das "\\" ist auf jeden Fall ok: "\" ist normalerweise das Zeichen, das anzeigt, daß das Zeichen danach "wörtlich" und nicht z.B. als RegEx gemeint ist.
Oder es deutet ein Sonderzeichen an, wie "\n".
Wenn man wirklich "\" haben will, muß man oft also "\\" schreiben. Hier weicht DOS/Windows mit seinen Pfaden von der Programmiernorm (z.B. von C) ab.

Ansonsten: Bau' Dir doch selbst was mit shutil.rmdir und os.path.walk.

Vielleicht gehen auch "\\" und "/" nicht zusammen in einem Pfad?! Dann müßte man eben eins davon im String ersetzen. Das wäre ja nun nicht so schwer.

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

problembär hat geschrieben:Das "\" ist auf jeden Fall ok: "" ist normalerweise das Zeichen, das anzeigt, daß das Zeichen danach "wörtlich" und nicht z.B. als RegEx gemeint ist.
Oder es deutet ein Sonderzeichen an, wie "\n".
Mit Regexp hat das nichts zu tun. ``\`` ist halt einfach das Escapezeichen, das verwendet wird um Sonderzeichen in Litaralen zu bekommen, wie etwa ``\n``. Um einen Backslash du bekommen muss man den Backslash escapen, also ``\\``, das ist alles.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
problembär

Meinte ich doch, aber danke für die Formulierungshilfe.
frabron
User
Beiträge: 306
Registriert: Dienstag 31. März 2009, 14:36

lunar hat geschrieben:Nicht direkt zum Problem, doch "/" ist unter Windows nur ungewöhnlich, aber ansonsten völlig äquivalent zu "".
Dennoch, wenn ich in der Windows Konsole

Code: Alles auswählen

>dir D:\\brfr\\grassdata\\SEO_WIND_CALC/*.*
mache, dann bekomme ich die Meldung
Invalid switch - "*.*".

Code: Alles auswählen

dir D:\\brfr\\grassdata\\SEO_WIND_CALC\*.*
also mit Backslash gehts
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Konsole != Python

Code: Alles auswählen

>>> os.path.isdir('C:/Programme/')
True
Edit: gemischt geht natürlich auch

Code: Alles auswählen

>>> os.path.isdir('C:\\Programme/OpenOffice.org 3\\')
True
the more they change the more they stay the same
frabron
User
Beiträge: 306
Registriert: Dienstag 31. März 2009, 14:36

Das Problem sass wohl mal wieder vor dem Rechner. Mein Ansatz zur Konstruktion des Pfades war falsch :oops:

Denn mein Testscript läuft durch, deshalb habe ich mir die Architektur des Programmes (GRASS GIS) in dem das Skript läuft mal genauer angesehen ...
Antworten