Fehlende Rechte bei os.remove

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
The Bang 2
User
Beiträge: 14
Registriert: Montag 11. März 2013, 12:30

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.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
The Bang 2
User
Beiträge: 14
Registriert: Montag 11. März 2013, 12:30

Ö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)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
The Bang 2
User
Beiträge: 14
Registriert: Montag 11. März 2013, 12:30

Ah wunderbar :)

Vielen Dank für deine Hilfe!
Antworten