Seite 1 von 1

Fehlende Rechte bei os.remove

Verfasst: Freitag 15. März 2013, 01:29
von The Bang 2
Guten Abend,

ich spiele gerade mit verschiedenen Löschfunktionen herum. In einem Ordner befinden sich Ordner und Dateien, die ich gerne löschen möchte. Aktuell sieht das ganze so aus:

Code: Alles auswählen

import os
import shutil
aktive_path = "D:\\test\\dump"

a = os.listdir(aktive_path)
for i in a:
    try:
        if os.path.isdir(aktive_path+i):
            shutil.rmtree(aktive_path + '\\' + i)
        else:
            os.remove(aktive_path + "\\" + i)
    except shutil.Error:
        print ('Ein Fehler ist aufgetreten')
Leider bleibt mir das ganze immer bei "os.remove(aktive_path + "\\" + i)" mit dem Fehler stehen.

Code: Alles auswählen

Message	File Name	Line	Position	
Traceback				
    <module>	C:\Users\User\Desktop\Transfer\Projekt\test.py	11		
PermissionError: [WinError 5] Zugriff verweigert: 'D:\\test\\dump\\3HAC6811-2.20'				
Wie ist das Problem zu lösen? Ich möchte nur den Inhalt des Ordners löschen, nicht den Order selbst. Betriebssystem ist Windows 7, Python 3.3.0.

Re: Fehlende Rechte bei os.remove

Verfasst: Freitag 15. März 2013, 01:44
von cofi
Erstmal ein paar Veraenderungen:

Code: Alles auswählen

import os
import shutil

active_path = r"D:\test\dump"

for name in os.listdir(active_path):
    path = os.path.join(active_path, name)
    try:
        if os.path.isdir(path):
            shutil.rmtree(path)
        else:
            os.remove(path)
    except shutil.Error as e:
        print ('Ein Fehler ist aufgetreten: ', e)
Der Fehler kann zwei Ursachen haben: 1. Die Datei wird gerade benutzt, 2. du hast nicht genuegend Rechte.

Re: Fehlende Rechte bei os.remove

Verfasst: Freitag 15. März 2013, 01:48
von The Bang 2
Öhm - ich weis jetzt nicht wieso, aber mit deiner Version funktionierts.

Würdest du mir bitte kurz die Funktionen erklären?

Hier speziell das mit dem r?

Code: Alles auswählen

active_path = r"D:\test\dump"
und hier das mit dem as e: ?

Code: Alles auswählen

    except shutil.Error as e:
        print ('Ein Fehler ist aufgetreten: ', e)

Re: Fehlende Rechte bei os.remove

Verfasst: Freitag 15. März 2013, 01:53
von cofi
Mit der Info: Deine Schutz vor dem entfernen von Verzeichnissen hat nicht funktioniert und es wurde immer `os.remove` aufgerufen.

Fuer Pfade solltest du immer `os.path.join` nutzen, `r".."` stellt einen "rawstring" dar bei dem alle Backslashes escaped werden -- wichtig fuer RegExp und Windowspfadliterale -- und das `as e` weisst die abgefangene Exception `e` zu und wird in dem Fall mitausgegeben.

Re: Fehlende Rechte bei os.remove

Verfasst: Freitag 15. März 2013, 01:54
von The Bang 2
Ah wunderbar :)

Vielen Dank für deine Hilfe!