Скопируйте файл из одного места в другое в Python

1

У меня есть список под названием 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.

  • 1
    Глядя на комментарий psytho, взгляните на пакет os для манипулирования путями.
  • 1
    docs.python.org/2/library/shutil.html copy принимает папки в качестве места назначения
Теги:
python-3.x
file-copying
copyfile

4 ответа

6
Лучший ответ

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

Вы можете получить имя файла, используя 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))
  • 0
    Просто и элегантно. Спасибо. Это имеет смысл, и пример был превосходным. Очень признателен
2

Используйте 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
    если вы используете shutil почему бы не использовать copy которая напрямую позволяет поместить каталог в качестве места назначения?
  • 0
    Это должно помочь. stackabuse.com/how-to-copy-a-file-in-python
Показать ещё 1 комментарий
1

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

0

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

например

    import shutil

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

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

  • 1
    Я только понял, что это было добавлено как комментарий выше. Извините за дублирование.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню