web-dev-qa-db-ja.com

Pythonである場所から別の場所にファイルをコピーする

私は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'

これを機能させるために私が見ることができるものは何ですか? MacとLinuxでPython 3を使用しています。

4
robster

単にフォルダ名ではなく、宛先ファイルのフルネームを指定する必要があります。

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))
11
Psytho

使用する 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])))
6
Rakesh

Shutil.copy()コマンドを使用するだけです。

例えば.

    import shutil

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

[Python 3.6.1ドキュメントから。これを試してみたところ、うまくいきました。]

4
Z Yoder

おそらく、ソース文字列からファイル名を切り取り、それを宛先パスの後ろに置く必要があるため、完全なファイルパスになります。

2
Thom