pathlib にはファイルコピー機能が無いため、 shutil モジュールを使用します。
ファイルのコピー方法
「shutil.copy()」でパーミッション情報も含めてコピーできます。「shutil.copy2()」を使用するとパーミッションに加え、メタ情報(作成日や変更日)もコピーされます。import shutil
import pathlib
fromPath = pathlib.Path(コピー元ファイル名)
toPath = pathlib.Path(コピー先ディレクトリ または ファイル名)
shutil.copy(fromPath, toPath)
パーミッションに加え、メタ情報(作成日や変更日)もコピーしたい場合
shutil.copy2(fromPath, toPath)
- コピー先にディレクトリが指定された場合、コピー先ディレクトリに、元のファイル名でコピーされます。
- コピー先にファイル名が指定された場合、そのファイル名でコピーされます。
- コピー先のディレクトリがない場合、例外が発生します。 Path オブジェクトの mkdir() メソッドで事前に作成しておきます。
python のバージョンが古い場合
古いバージョンでは、shutil の引数に Path オブジェクトを渡すと例外が発生します。 str() を使用し、文字列に変換すると回避できます。fromFilePath = pathlib.Path(コピー元ファイル名)
toPath = pathlib.Path(コピー先ディレクトリ または ファイル名)
shutil.copy(str(fromFilePath), str(toPath))
サンプルコード
ファイル 'test.txt' を、 './copydir/test.txt' にコピーします。ディレクトリがない場合は、作成します。import shutil
import pathlib
# コピーするファイル
fromFilePath = pathlib.Path('./test.txt')
# コピー先のディレクトリ(フォルダ)
toDirPath = pathlib.Path('./copydir')
# ディレクトリが無ければ作る
# parents=True -> 親ディレクトリが無ければ作成
# exist_ok=True -> ディレクトリがあってもエラーにしない
toDirPath.mkdir(parents=True, exist_ok=True)
# ファイルコピー
shutil.copy(fromFilePath, toDirPath)
検証環境
- Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64 bit (AMD64)] on win32
- Microsoft Windows 10 Pro Version 1909 OS Build 18363.657