Скопируйте файл из одного места в другое в Python - PullRequest
0 голосов
/ 17 октября 2018

У меня есть список с именем fileList , содержащий тысячи имен файлов и размеров, примерно так:

['/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']

Я хочу скопировать файлы, используя fileList [0] в качестве источника, но дляеще один целый пункт назначения.Что-то вроде:

copyFile(fileList[0], destinationFolder)

и пусть он скопирует файл в это место.

Когда я пытаюсь это сделать так:

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

Я получаю сообщение об ошибке вродеследующее:

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

Что я могу посмотреть, чтобы это заработало?Я использую Python 3 на Mac и в Linux.

Ответы [ 4 ]

0 голосов
/ 25 апреля 2019

Вы можете просто использовать команду shutil.copy ():

например

    import shutil

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

[Из документации Python 3.6.1.Я попробовал это, и это работает.]

0 голосов
/ 17 октября 2018

Вам, вероятно, нужно обрезать имя файла из исходной строки и поместить его позади пути назначения, чтобы он был полным путем к файлу.

0 голосов
/ 17 октября 2018

Используйте os.path.basename, чтобы получить имя файла и затем использовать его в месте назначения.

import os
from shutil import copyfile


for item in fileList:
    copyfile(item[0], "/Users/username/Desktop/testPhotos/{}".format(os.path.basename(item[0])))
0 голосов
/ 17 октября 2018

Вы должны дать полное имя файла назначения, а не просто имя папки.

Вы можете получить имя файла, используя os.path.basename(path), а затем создать путь к описанию, используя usinos.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))
...