2016-12-10 2 views
1

J'ai essayé de faire mon premier programme Python qui copie tous les fichiers d'un dossier et les coller dans un autre:IOError en utilisant shutil.copyfile() sur Windows

import shutil 
shutil.copyfile("C:\Users\USER\Desktop\MoveFrom\Test.txt", 
       "C:\Users\USER\Desktop\MoveTo") 

Mais je continue à recevoir un message d'erreur et ne peut pas comprendre pourquoi:

Traceback (most recent call last): 
    File "C:\Users\USER\Desktop\Python\movefiles.py", line 2, in <module> 
    shutil.copyfile("C:\Users\USER\Desktop\MoveFrom\Test.txt", "C:\Users\USER\Desktop\MoveTo") 
    File "C:\PYTHON27\lib\shutil.py", line 83, in copyfile 
    with open(dst, 'wb') as fdst: 
IOError: [Errno 13] Permission denied: 'C:\\Users\\USER\\Desktop\\MoveTo' 

Répondre

2

Avec shutil.copyfile(), vous devez donner le chemin de destination complète, (y compris le nouveau nom de fichier), non seulement le répertoire de destination comme vous pouvez le faire avec la commande copy.

Notez également que dans la plupart des langues, les barres obliques inverses sont interprétées spécialement à l'intérieur des chaînes littérales par le langage. Donc, les chemins que vous utilisiez étaient complètement invalides. Vous devez soit échapper les barres obliques inverses (en ajoutant une barre oblique inverse en face de chacun d'eux) dans vos chemins, soit utiliser le préfixe r, qui indique à Python de ne pas interpréter les barres obliques inversées spécialement.

import shutil 
shutil.copyfile(
    r"C:\Users\USER\Desktop\MoveFrom\Test.txt", 
    r"C:\Users\USER\Desktop\MoveTo\Test.txt") 
+0

Merci @martineau - les écrans tactiles se sucent parfois. –

0

Vous devez copy() au lieu de copyfile(), voir https://docs.python.org/2/library/shutil.html.

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