Seite 1 von 1

shutil.rmtree

Verfasst: Dienstag 16. Februar 2010, 17:45
von frabron
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

Verfasst: Dienstag 16. Februar 2010, 19:10
von lunar
Nicht direkt zum Problem, doch "/" ist unter Windows nur ungewöhnlich, aber ansonsten völlig äquivalent zu "\".

Verfasst: Dienstag 16. Februar 2010, 19:33
von 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ß

Verfasst: Dienstag 16. Februar 2010, 19:44
von Leonidas
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.

Verfasst: Dienstag 16. Februar 2010, 21:18
von problembär
Meinte ich doch, aber danke für die Formulierungshilfe.

Verfasst: Mittwoch 17. Februar 2010, 07:59
von frabron
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

Verfasst: Mittwoch 17. Februar 2010, 10:21
von Dav1d
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

Verfasst: Mittwoch 17. Februar 2010, 11:11
von frabron
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 ...