web-dev-qa-db-fra.com

en utilisant shutil.copyfile j'obtiens un Python IOError: [Errno 13] Autorisation refusée:

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?

15
DrDark

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])
22
Lev Levitsky

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.

2
White

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.

1
Ravi Bhanushali