J'ai le chemin d'un fichier stocké dans une variable (disons) filePath. Je voudrais copier ce fichier particulier dans un autre dossier spécifique dans un script Python.
J'ai essayé
folderPath = (os.getcwd() + "/folder_name/") #to get the path of the folder
shutil.copyfile(filePath, folderPath)
Mais j'ai une erreur IOError: [Errno 21] Is a directory
.
Comment puis-je résoudre ça ?
Ma question peut sembler être un doublon de Comment copier un fichier en python? . Mais en fait, je veux copier un fichier dans un dossier/répertoire alors que la plupart des réponses à cette question mentionnent la copie d'un fichier dans un autre fichier .
Utilisez shutil.copy(filePath, folderPath)
au lieu de shutil.copyfile()
. Cela vous permettra de spécifier un dossier comme destination et de copier le fichier, y compris les autorisations.
shutil.copy(src, dst, *, follow_symlinks=True)
:Copie le fichier src dans le fichier ou le répertoire dst. src et dst doivent être des chaînes. Si dst spécifie un répertoire, le fichier sera copié dans dst en utilisant le nom de fichier de base de src. Renvoie le chemin d'accès au fichier nouvellement créé.
...
copy () copie les données du fichier et le mode d'autorisation du fichier (voir os.chmod ()). Les autres métadonnées, telles que les heures de création et de modification du fichier, ne sont pas conservées. Pour conserver toutes les métadonnées de fichier de l'original, utilisez plutôt copy2 ().
https://docs.python.org/3/library/shutil.html#shutil.copy
Voir la différence de copie également documentée dans shutil.copyfile()
elle-même:
shutil.copyfile(src, dst, *, follow_symlinks=True)
:Copiez le contenu (pas de métadonnées) du fichier nommé src dans un fichier nommé dst et retourner dst. src et dst sont des noms de chemin donnés sous forme de chaînes. 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 spécifient le même fichier, SameFileError est déclenché.
https://docs.python.org/3/library/shutil.html#shutil.copyfile
folderpath
doit être un fichier, pas un répertoire. L'erreur dit tout. Faites quelque chose comme:
shutil.copyfile(filePath, folderPath+'/file_copy.extension')
Modifiez votre code comme ci-dessous:
folderPath = os.path.join('folder_name', os.path.basename(filePath))
shutil.copyfile(filePath, folderPath)