はじめに
常々会社の上司に「Python実践試験とりなさい」と言われているのでボチボチ勉強しているのですが、shutil のファイルコピー系の関数の仕様が覚えられないので整理してみようと思いました。
なんだよcopy2って 覚えやすい関数名にしろよ
shutil とは
shutil(シャトル)とは、Python標準のライブラリで、ディレクトリやファイル、アーカイブファイルに対して高水準な操作を提供するモジュールのこと。
名前は "shell utilities" が由来となっており、シェルコマンドで行うようなファイル操作をPythonで出来るようにしてくれるようです。
ファイルコピー関数まとめ
copyfile(src, dst)
- srcというファイルの内容をdstというファイルにコピーする
- dstはファイルのみ(ディレクトリは不可)
- メタデータやパーミッションはコピーされず、ファイルの内容だけコピーされる
- dstがすでに存在する場合、上書きされる
copy(src, dst)
- srcというファイルの内容をdstというファイルもしくはディレクトリにコピーする
- dstがディレクトリである場合、dst内にsrcというファイルがコピーされる
- メタデータはコピーされず、ファイルの内容とパーミッションがコピーされる
- dstがファイルですでに存在する場合、上書きされる
copy2(src, dst)
- srcというファイルの内容をdstというファイルもしくはディレクトリにコピーする
- dstがディレクトリである場合、dst内にsrcというファイルがコピーされる
- ファイルの内容とパーミッション、メタデータがコピーされる
- dstがファイルですでに存在する場合、上書きされる
copymode(src, dst)
- srcというファイルのパーミッションをdstというファイルもしくはディレクトリにコピーする
- ファイルの中身、メタデータはコピーされない
copystat(src, dst)
- srcというファイルのパーミッション、最終アクセス時間、最終変更時間、その他もろもろのファイル情報をdstというファイルもしくはディレクトリにコピーする
- ファイルの中身はコピーされない
copyfile,copy,copy2の関係は以下の通りになります。
| 関数名 | コピー内容 | 内部処理 |
|---|---|---|
| copyfile | ファイルの内容のみ | - |
| copy | ファイルの内容、パーミッション | copyfile,copymodeを実行 |
| copy2 | ファイルの内容、パーミッション、メタデータ | copyfile,copystatを実行 |
copy,copy2は内部では複数の関数を実行しているというわけですね。
ディレクトリ操作系関数まとめ
rmtree(path)
- pathで指定したディレクトリ以下のファイルをすべて削除する
- ignore_errorsをTrueにするとファイル削除時のエラーを無視できる(デフォルトはFalse)
move(src, dst)
- srcディレクトリ以下のファイルをdstに移動する
- 移動時のコピー仕様は
copy2(copy_functionで設定できる)
copytree(src, dst)
- srcディレクトリ以下のファイルをdstにコピーする
- 移動時のファイルのコピー仕様は
copy2、ディレクトリのコピー仕様はcopystat- ファイルのコピー仕様はcopy_functionで設定できる
- ignoreでコピーの対象外となるファイルを指定できる
-
shutil.ignore_patternsであらかじめ指定することもできる
-
まとめ
詳しくは公式ドキュメントを参照!
めざせPython実践試験合格!![]()