2010-09-10 4 views
1

Alors voici mon problème. J'ai un script python qui prend un zipfile et extrait son contenu. Puis, basé sur une contrainte, je vais essayer de supprimer le dossier dont le contenu vient d'être extrait. Pour une raison quelconque, j'obtiens une erreur, WindowsError: [Erreur 5] L'accès est refusé: 'Foldername' lorsque j'essaye de supprimer ce dossier. Le code simple se présente comme suitJe ne peux pas supprimer un dossier que je viens d'extraire d'un fichier zip en python

wzip = zipfile.ZipFile ('zipfile.zip')

wzip.extractall()

wzip.close()

os.remove (» ExtractedFolder ')

Si je cours ce dans l'interprète, je reçois le texte suivant:

retraçage (le plus récent appel dernier): fichier « », ligne 1, dans WindowsError: [Erreur 5] L'accès est refusé: 'ExtractedFolder'

J'utilise Python 2.6 sur Windows Vista 32 bits et je suis un peu perplexe quant à la raison pour laquelle cela pourrait se produire.

Répondre

4

Plusieurs raisons possibles.

  1. Vous devez utiliser os.rmdir pour supprimer les répertoires
  2. Vous devez vider le dossier premier - rappelez-vous, la commande Windows rmdir a besoin d'une option pour /S supprimer le contenu et Python utilise probablement.
  3. Est-ce que le décompresseur utilise également les attributs de l'archive? Des attributs en lecture seule peuvent être appliqués.
  4. Lisez-vous quelque chose à partir de ce dossier , avant de supprimer? Vous ne pouvez pas l'avoir fermé.
  5. Windows peut causer des problèmes similaires avec les noms de fichiers contenant des caractères inhabituels
+0

Je crois que vous avez raison sur 1. et 2. os.remove était la mauvaise commande et os.rmdir aurait aussi bien fonctionné, sauf pour le fait que le dossier n'est pas vide. – TinyGrasshopper

1

Je vois un problème possible sur Windows, qui est que vous pourriez avoir un fichier ouvert dans ce répertoire. Assurez-vous que vous fermez explicitement tous les fichiers que vous avez ouverts en utilisant file.close() (votre exemple de code semble correct, cependant).

En outre, il peut être utile de jeter un oeil à shutils.rmtree: il peut récursivement supprimer des répertoires et capturer des erreurs.

+0

Merci. puisque le dossier n'était pas vide, j'étais censé utiliser shutil.rmtree – TinyGrasshopper

Questions connexes