J'ai du code python en utilisant shutil.copyfile:
import os
import shutil
src='C:\Documents and Settings\user\Desktop\FilesPy'
des='C:\Documents and Settings\user\Desktop\\tryPy\Output'
x=os.listdir(src)
a=os.path.join(src,x[1])
shutil.copyfile(a,des)
print a
Cela me donne une erreur:
IOError: [Errno 13] Permission denied: 'C:\\Documents and Settings\\user\\Desktop\\tryPy\\Output'
Pourquoi n'ai-je pas l'autorisation de copier le fichier?
De la documentation of shutil.copyfile
:
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 shutil.copy () pour une copie qui accepte un chemin de répertoire cible. Si src et dst sont les mêmes fichiers, une erreur est déclenchée. L'emplacement de destination doit être accessible en écriture; sinon, une exception IOError sera déclenchée. Si dst existe déjà, il sera remplacé. Les fichiers spéciaux tels que les périphériques et les canaux de caractères ou de blocs ne peuvent pas être copiés avec cette fonction. src et dst sont des noms de chemin donnés sous forme de chaînes.
Donc je suppose que vous devez soit utiliser shutil.copy
ou ajoutez le nom du fichier à des
:
des = os.path.join(des, x[1])
Je vous conseille d'utiliser plutôt shutil.copyfile plutôt que shutil.copy si vous le pouvez.
Avec shutil.copyfile, vous devez considérer les métadonnées telles que l'autorisation d'écriture.
J'ai essayé toutes les choses ici, mais le problème avec mon code concernait l'autorisation du dossier de destination. J'ai créé ma propre fonction pour créer dir,
def mkdirs(newdir,mode=777):
try:
os.makedirs(newdir, mode)
except OSError as err:
return err
Au lieu de 777, plus tard j'ai utilisé '0o777' la valeur octale, et plus tard j'ai utilisé shutil.copyfile(target_file,dest_file)
et cela a fonctionné!
J'espère que cela aide quelqu'un, qui crée d'abord le répertoire puis copie le fichier qu'il contient.