web-dev-qa-db-fra.com

Copiez un fichier d'un emplacement à un autre dans Python

J'ai une liste appelée fileList contenant des milliers de noms de fichiers et de tailles quelque chose comme ceci:

['/home/rob/Pictures/some/folder/picture one something.jpg', '143452']
['/home/rob/Pictures/some/other/folder/pictureBlah.jpg', '473642']
['/home/rob/Pictures/folder/blahblahpicture filename.jpg', '345345']

Je veux copier les fichiers en utilisant fileList [0] comme source mais vers une autre destination entière. Quelque chose comme:

copyFile(fileList[0], destinationFolder)

et demandez-lui de copier le fichier à cet emplacement.

Quand j'essaye comme ça:

for item in fileList:
    copyfile(item[0], "/Users/username/Desktop/testPhotos")

J'obtiens une erreur comme celle-ci:

with open(dst, 'wb') as fdst:
IsADirectoryError: [Errno 21] Is a directory: '/Users/username/Desktop/testPhotos'

Que pourrais-je envisager pour que cela fonctionne? J'utilise Python 3 sur un Mac et sur Linux.

4
robster

Vous devez donner un nom complet du fichier de destination, pas seulement un nom de dossier.

Vous pouvez obtenir le nom du fichier à l'aide de os.path.basename(path) puis créer le chemin de destionation à l'aide de os.path.join(path, *paths)

for item in fileList:
    filename = os.path.basename(item[0])
    copyfile(item[0], os.path.join("/Users/username/Desktop/testPhotos", filename))
11
Psytho

Utilisation os.path.basename pour obtenir le nom du fichier, puis l'utiliser dans la destination.

import os
from shutil import copyfile


for item in fileList:
    copyfile(item[0], "/Users/username/Desktop/testPhotos/{}".format(os.path.basename(item[0])))
6
Rakesh

Vous pouvez simplement utiliser la commande shutil.copy ():

par exemple.

    import shutil

    for item in fileList:
        shutil.copy(item[0], "/Users/username/Desktop/testPhotos")

[De la documentation Python 3.6.1. J'ai essayé cela et cela fonctionne.]

4
Z Yoder

Vous devrez probablement couper le nom de fichier de la chaîne source et le placer derrière le chemin de destination, il s'agit donc d'un chemin de fichier complet.

2
Thom