У меня есть список под названием 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.
Вы должны указать полное имя целевого файла, а не только имя папки.
Вы можете получить имя файла, используя os.path.basename(path)
а затем построить путь назначения 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))
Используйте 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])))
shutil
почему бы не использовать copy
которая напрямую позволяет поместить каталог в качестве места назначения?
Вероятно, вам нужно отключить имя файла из исходной строки и поместить его за путь назначения, так что это полный путь к файлу.
Вы можете просто использовать команду shutil.copy():
например
import shutil
for item in fileList:
shutil.copy(item[0], "/Users/username/Desktop/testPhotos")
[Из документации Python 3.6.1. Я попробовал это, и это работает.]
os
для манипулирования путями.copy
принимает папки в качестве места назначения