Pythonを使ってファイルをコピーする方法は、日々の業務やスクリプト作成の中で非常に役立つスキルです。たとえば、ログファイルのバックアップを取ったり、テンプレートを複製して使ったりと、ファイル操作は自動化処理の中でも基本かつ頻出の処理の一つです。この記事では、Pythonでファイルをコピーする際に使う代表的な方法をわかりやすく解説します。標準ライブラリだけで完結する方法を中心に、実用的なコード例とともに紹介していきます。
Pythonでファイルのコピーを行う最も基本的な方法は、標準ライブラリのshutil
モジュールを使うことです。外部ライブラリのインストールが不要で、スクリプト内でインポートするだけで簡単に扱えます。
shutil.copy()
は、ファイルの内容をコピーし、アクセス権限も可能な範囲でコピーします。以下に使用例を示します。
import shutil
shutil.copy('source.txt', 'destination.txt')
このコードは、source.txt
というファイルをdestination.txt
という名前で同じディレクトリにコピーします。
ファイルが別のディレクトリにある場合は、フルパスで指定できます。
shutil.copy('/path/to/source.txt', '/path/to/backup/source_backup.txt')
似た関数にshutil.copyfile()
があります。こちらはアクセス権限のコピーを行わず、内容のみをコピーします。
shutil.copyfile('source.txt', 'destination.txt')
用途に応じて、どちらを使うか選びましょう。
より精密にコピーしたい場合は、shutil.copy2()
を使用すると良いでしょう。これはファイルの中身だけでなく、作成日時や更新日時などのメタデータも含めてコピーしてくれます。
shutil.copy2('source.txt', 'destination.txt')
バックアップ用途や、ファイルの更新時刻を保持したいケースに便利です。
ファイル単体ではなく、フォルダ全体をコピーしたい場合はshutil.copytree()
を使用します。
shutil.copytree('source_folder', 'destination_folder')
このコードは、source_folder
内のファイルとサブディレクトリをすべてdestination_folder
に複製します。ただし、destination_folderは事前に存在してはいけません。既存のフォルダがあるとエラーになります。
Python 3.8以降では、dirs_exist_ok=True
というオプションを指定することで、既存のフォルダにも上書きコピーができます。
shutil.copytree('source_folder', 'destination_folder', dirs_exist_ok=True)
shutil
に加えてos
モジュールを組み合わせると、さらに高度な処理が可能になります。たとえば、特定の拡張子を持つファイルだけをコピーするといった条件付きコピーも実装可能です。
import os
import shutil
source_dir = 'source_folder'
destination_dir = 'backup_folder'
for filename in os.listdir(source_dir):
if filename.endswith('.txt'):
full_file_name = os.path.join(source_dir, filename)
shutil.copy(full_file_name, destination_dir)
このコードは、source_folder
内の.txt
ファイルだけをbackup_folder
にコピーします。
ファイルコピー時には、ファイルが存在しない、アクセス権限がないなどのエラーが発生する可能性があります。これらに対してtry-except
文を使うことで、安全な処理が可能になります。
import shutil
try:
shutil.copy('source.txt', 'destination.txt')
print("コピー成功")
except FileNotFoundError:
print("ファイルが見つかりません")
except PermissionError:
print("アクセス権限がありません")
except Exception as e:
print(f"想定外のエラー: {e}")
標準ライブラリでのコピーは汎用的で安全ですが、大量のファイルを扱う場合はやや遅く感じることがあります。その場合、以下のような工夫が考えられます。
rsync
やrobocopy
などOS依存コマンド)を使うただし、速度と安全性はトレードオフの関係になるため、慎重な設計が求められます。
Pythonでファイルをコピーする方法には、目的に応じて複数の選択肢があります。基本的にはshutil
モジュールを使えば十分であり、copy
やcopy2
、copyfile
などの関数を状況に応じて使い分けましょう。また、フォルダのコピーや条件付きコピーなど、実務に直結する応用も可能です。
Pythonによるファイル操作を習得することで、自動化スクリプトの幅が広がり、業務効率が格段に向上します。ぜひ今回紹介したコードを参考に、自分なりのユースケースに落とし込んでみてください。