47 votes

Python. IOError : [Errno 13] Autorisation refusée : lorsque je copie le fichier

J'ai deux dossiers : In, Out - ce n'est pas un dossier système sur le disque D : - Windows 7. Out contient "myfile.txt" J'exécute la commande suivante en python :

 >>> shutil.copyfile( r"d:\Out\myfile.txt", r"D:\In" )

Traceback (most recent call last):
  File "<pyshell#39>", line 1, in <module>
    shutil.copyfile( r"d:\Out\myfile.txt", r"D:\In" )
  File "C:\Python27\lib\shutil.py", line 82, in copyfile
    with open(dst, 'wb') as fdst:
IOError: [Errno 13] Permission denied: 'D:\\In'

Quel est le problème?

90voto

Tim Pietzcker Points 146308

Lire la doc :

shutil.copyfile(src, dst)

Copiez le contenu (pas de métadonnées) du fichier nommé src dans un fichier nommé dst . dst doit être le nom complet du fichier cible ; regardez copy() pour une copie qui accepte un chemin de répertoire cible.

26voto

sohom Points 539

utiliser Shutil.copy au lieu de Shutil.copyfile

Exemple:

 shutil.copy(PathOf_SourceFileName.extension,TargetFolderPath)

4voto

hassanzadeh.sd Points 1623

J'ai résolu ce problème, vous devriez être le nom complet du fichier cible pour la destination

destination = chemin répertoire + nom de fichier.*

J'utilise ce fichier de copie de code sapin wav avec Shutil :

     # open file with QFileDialog

    browse_file = QFileDialog.getOpenFileName(None, 'Open file', 'c:', "wav files (*.wav)")

    # get file name 

    base = os.path.basename(browse_file[0])
    os.path.splitext(base)
    print(os.path.splitext(base)[1])

    # make destination path with file name

    destination= "test/" + os.path.splitext(base)[0] + os.path.splitext(base)[1]
    shutil.copyfile(browse_file[0], destination)

4voto

Gowtham Balusamy Points 318

Utilisez Shutil.copy2 au lieu de Shutil.copyfile

 import shutil 
shutil.copy2('/src/dir/file.ext','/dst/dir/newname.ext') # file copy to another file
shutil.copy2('/src/file.ext', '/dst/dir') # file copy to diff directory

1voto

Hugo Vares Points 21

Tout d'abord, assurez-vous que vos fichiers ne sont pas verrouillés par Windows, certaines applications, comme MS Office, verrouillent les fichiers ouverts.

J'ai eu l'erreur 13 lorsque j'essayais de renommer une longue liste de fichiers dans un répertoire, mais Python essayait de renommer certains dossiers qui se trouvaient sur le même chemin que mes fichiers. Donc, si vous n'utilisez pas la bibliothèque Shutil, vérifiez s'il s'agit d'un répertoire ou d'un fichier !

 import os
path="abc.txt"

if os.path.isfile(path):
    #do yor copy here
    print("\nIt is a normal file") 

Ou

 if os.path.isdir(path):
    print("It is a directory!")
else:
    #do yor copy here
    print("It is a file!")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X