Python shutil.copy()とshutil.copystat()でファイルをコピー
Python shutil.copy()とshutil.copystat()でファイルをコピー
Pythonのshutilモジュールは、ファイルのコピーとメタデータ保持のための直感的な関数を提供します。主なユーティリティはshutil.copy()とshutil.copystat()の2つです。
copy(src, dst)
srcにあるファイルをdstにコピーします。ファイル内容は複製されますが、ファイル権限とタイムスタンプは保持されません。
copystat(src, dst)
srcからdstへ、権限、タイムスタンプ、その他OS固有の属性を含むファイルメタデータをコピーします。copy()成功後に呼び出すことで、完全なファイル状態を再現します。
ステップバイステップ例
- ソースファイルの特定
カレントワーキングディレクトリにguru99.txtが存在することを確認し、絶対パスを取得。

import os
from os import path
src_path = path.realpath("guru99.txt")
print("ソース:", src_path)
- バックアップ名の作成
元のファイル名に.bakを追加してデスティネーションパスを作成。
dst_path = src_path + ".bak"
print("デスティネーション:", dst_path)
- ファイル内容のコピー
shutil.copy()でファイルデータを複製。
import shutil shutil.copy(src_path, dst_path)
- メタデータのコピー
コンテンツコピー後、元ファイルの権限とタイムスタンプを複製。
shutil.copystat(src_path, dst_path)
- コピーの検証
os.path.getmtime()でバックアップファイルの最終更新時刻を表示。
import datetime
mod_time = path.getmtime(dst_path)
print("最終更新:", datetime.datetime.fromtimestamp(mod_time))
スクリプト実行で、元ファイルと同じ権限とタイムスタンプを持つguru99.txt.bakが同ディレクトリに作成されます。
実践的なヒント
- 必ず
shutil.copy()をshutil.copystat()より先に実行 – 後者は既存のデスティネーションファイルを必要とする - 異なるファイルシステム間での作業時は、すべてのメタデータ属性がサポートされるわけではないことに注意;
copystat()はOSが公開するもののみコピー - 再帰的なディレクトリコピーには
shutil.copytree()や、copy()とcopystat()を1ステップで行うshutil.copy2()を検討
まとめ
shutil.copy(src, dst)でファイル内容を複製shutil.copystat(src, dst)で権限、タイムスタンプ、その他メタデータを複製
Python
- Python データ型マスター: 実践ガイド
- Python 演算子完全マスター: 包括的ガイド
- Python pass文完全マスター: 実践ガイド
- Python 関数引数完全マスター: 位置引数・キーワード引数・デフォルト引数
- Python辞書完全ガイド:作成、操作、高度なテクニック
- PythonファイルI/O:ファイル操作、読み書き、管理のマスター
- Python len()関数:オブジェクトの長さを測る実践ガイド
- Python String.find()メソッド完全ガイド:構文、例、代替手法
- Pythonでファイル・ディレクトリの存在確認:実践ガイド
- Python JSON:エンコード、デコード、ファイル処理の実践ガイド
- PythonファイルI/O:入出力操作をマスターする