web-dev-qa-db-ja.com

Pythonスクリプトの特定のフォルダーにファイルをコピーする方法は?

ファイルのパスを変数(たとえば)filePathに格納しています。 Pythonスクリプト内の別の特定のフォルダーにその特定のファイルをコピーしたいと思います。

私は試した

folderPath = (os.getcwd() + "/folder_name/") #to get the path of the folder
shutil.copyfile(filePath, folderPath)

しかし、エラーが発生しましたIOError: [Errno 21] Is a directory

どうすれば解決できますか?

私の質問は pythonでファイルをコピーするにはどうすればよいですか の複製のように思えるかもしれません。しかし、実際には、ファイルをfolder/directoryにコピーしたいのですが、その質問に対するほとんどの回答は、あるファイルを別のファイルにコピーすることを言及していますファイル

7
dravid07

shutil.copy(filePath, folderPath)の代わりにshutil.copyfile()を使用します。これにより、フォルダーを宛先として指定し、許可を含むファイルをコピーできます。

shutil.copy(src, dst, *, follow_symlinks=True)

ファイルsrcをファイルまたはディレクトリdstにコピーします。 srcとdstは文字列でなければなりません。 dstがディレクトリを指定する場合、ファイルはsrcのベースファイル名を使用してdstにコピーされます。新しく作成されたファイルへのパスを返します。

...

copy()は、ファイルデータとファイルの許可モードをコピーします(os.chmod()を参照)。ファイルの作成時間や変更時間などの他のメタデータは保持されません。オリジナルのすべてのファイルメタデータを保持するには、代わりにcopy2()を使用します。

https://docs.python.org/3/library/shutil.html#shutil.copy

shutil.copyfile()自体にも記載されているコピーの違いを参照してください。

shutil.copyfile(src, dst, *, follow_symlinks=True)

srcという名前のファイルの内容(メタデータなし)をコピーdstという名前のファイルにdstを返します。 srcとdstは、文字列として指定されたパス名です。 dstは完全なターゲットファイル名でなければなりません。shutil.copy()で、ターゲットディレクトリパスを受け入れるコピーを探します。 srcとdstが同じファイルを指定している場合、SameFileErrorが発生します。

https://docs.python.org/3/library/shutil.html#shutil.copyfile

13
Hendrik Makait

folderpathはディレクトリではなくファイルでなければなりません。エラーはそれをすべて言います。次のようなことをしてください:

shutil.copyfile(filePath, folderPath+'/file_copy.extension')
2
Sam Chats

以下のようにコードを変更します。

folderPath = os.path.join('folder_name', os.path.basename(filePath))
shutil.copyfile(filePath, folderPath)
1
williezh