Il y a le script pour recréer un dossier:
# Remove folder (if exists) with all files
if os.path.isdir(str(os.path.realpath('..') + "\\my_folder")):
shutil.rmtree(os.path.realpath('..') + "\\my_folder", ignore_errors=True)
# Create new folder
os.mkdir(os.path.realpath('..') + "\\my_folder")
Cela fonctionne presque toujours, mais dans certains cas (lors de la création), je reçois
WindowsError: [Error 5] Access is denied: 'C:\\Path\\To\\my_folder'
Qu'est-ce qui pourrait causer cette erreur et comment puis-je l'éviter?
Les autorisations étaient peut-être le problème, mais j'avais le même problème '[Erreur 5], l'accès est refusé' sur os.rename()
et une simple nouvelle tentative a permis de renommer le fichier après quelques tentatives.
for retry in range(100):
try:
os.rename(src_name,dest_name)
break
except:
print "rename failed, retrying..."
Qu'est-ce qui pourrait causer cette erreur?
Vous n'avez simplement pas accès au dossier que vous écrivez pour le processus en cours d'exécution (python.exe), voire même pour l'utilisateur. À moins que votre utilisateur ne soit un administrateur, il peut exister des répertoires pour lesquels vous ne disposez pas d'autorisations en écriture.
Comment puis-je l'éviter?
En général, pour éviter une telle exception, on utiliserait un bloc try
et except
, dans ce cas ce serait un IOError
. Par conséquent, si vous voulez simplement ignorer l'accès refusé et continuer avec le script, vous pouvez essayer:
try:
# Remove folder (if exists) with all files
if os.path.isdir(str(os.path.realpath('..') + "\\my_folder")):
shutil.rmtree(os.path.realpath('..') + "\\my_folder", ignore_errors=True)
# Create new folder
os.mkdir(os.path.realpath('..') + "\\my_folder")
except IOError:
print("Error upon either deleting or creating the directory or files.")
else:
print("Actions if file access was succesfull")
finally:
print("This will be executed even if an exception of IOError was encountered")
Si vous ne vous attendiez vraiment pas à cette erreur et que cela n'est pas censé se produire, vous devez modifier les autorisations du fichier . Selon vos autorisations d'utilisateur, vous pouvez effectuer différentes étapes.
Utilisateur pouvant exécuter des programmes en tant qu'administrateur: Option A
cmd.exe
.cd
car il sera ouvert à C:\Windows\system32
sauf si vous avez modifié certains paramètres.> python myscript.py
.Utilisateur pouvant exécuter des programmes en tant qu'administrateur: Option B
Utilisateur sans privilèges administrateur:
Voir la documentation de RemoveDirectory; .__ "La fonction RemoveDirectory marque un répertoire à supprimer à la fermeture. Par conséquent, le répertoire n'est pas supprimé jusqu'à la fermeture du dernier descripteur du répertoire."
Cela signifie que si quelque chose réussit à créer une poignée dans le répertoire que vous supprimez (entre création et suppression), le répertoire n'est pas réellement supprimé et vous obtenez votre 'Accès refusé',
Pour résoudre ce problème, renommez le répertoire que vous souhaitez supprimer avant de le supprimer.
Alors
while True:
mkdir('folder 1')
rmdir('folder 1')
peut échouer, résoudre avec;
while True:
mkdir('folder 1')
new_name = str(uuid4())
rename('folder 1', new_name)
rmdir(new_name)
Créez votre fichier de script python. Dans ce cas, vous pouvez le copier dans C:\WINDOWS\system32. Le fichier de script crée un dossier nommé "Smaog"
import os
os.chdir('C:/Program Files')
os.makedirs('Smaog')
Créez un fichier de commandes, dans le dossier de votre choix.
echo off
title Renaming Folder
python sample.py
pause
Enregistrez le fichier de commandes. Pour l'exécuter, cliquez avec le bouton droit de la souris et choisissez Exécuter en tant qu'administrateur.
Vous pouvez toutefois choisir de le faire si vous ne souhaitez pas placer votre script python dans C:\WINDOWS\system32. Dans votre fichier de commandes, indiquez le dossier/répertoire dans lequel réside votre fichier de script python.
echo off
title Renaming Folder
cd c:\Users\Smaog\Desktop
python sample.py
pause
Puis exécutez-le en tant qu'administrateur comme expliqué ci-dessus.
Cela se produit parce que vous ne vérifiez pas si vous disposez des autorisations nécessaires pour ouvrir ce chemin. Vous devez modifier les autorisations sur ces dossiers.
J'ai eu ce problème hier soir après avoir basculé de Py2 à Py3 et j'ai réalisé que je l'installais pour tous les utilisateurs. Cela signifie que vous l’installez dans Program Files répertoire et non au lieu de% AppData% . Généralement, le fait d’exécuter en tant qu’administrateur résout le problème, comme certains d’entre vous l’ont dit plus haut, mais j’utilise VSCode et parfois PyCharm et j’adore y utiliser le terminal. Même si vous essayez d’exécuter ces programmes en tant qu’administrateur, vous aurez beaucoup de difficultés à essayer de vous concentrer sur votre joli code.
Ma solution:
1) Désinstallation complète (y compris Py Launcher)
2) Ensuite, installez avec installation personnalisée avec l'installateur fourni MAIS ...
3) NE PAS choisissez l’option INSTALLER POUR TOUS LES UTILISATEURS .
Je pense que cela rendra votre journée beaucoup plus facile sans les lignes "[Erreur 5]" à votre commande, car elle a fonctionné pour moi.