Pythonでファイルをコピーする方法を徹底解説|初心者向けコード付きガイド

Pythonを使ってファイルをコピーする方法は、日々の業務やスクリプト作成の中で非常に役立つスキルです。たとえば、ログファイルのバックアップを取ったり、テンプレートを複製して使ったりと、ファイル操作は自動化処理の中でも基本かつ頻出の処理の一つです。この記事では、Pythonでファイルをコピーする際に使う代表的な方法をわかりやすく解説します。標準ライブラリだけで完結する方法を中心に、実用的なコード例とともに紹介していきます。


shutilモジュールでファイルをコピーする

Pythonでファイルのコピーを行う最も基本的な方法は、標準ライブラリのshutilモジュールを使うことです。外部ライブラリのインストールが不要で、スクリプト内でインポートするだけで簡単に扱えます。

shutil.copy() の使い方

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()があります。こちらはアクセス権限のコピーを行わず、内容のみをコピーします。

shutil.copyfile('source.txt', 'destination.txt')

用途に応じて、どちらを使うか選びましょう。


shutil.copy2()でメタデータもコピー

より精密にコピーしたい場合は、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)

osモジュールとの組み合わせで柔軟な処理

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}")

高速コピーしたい場合のヒント

標準ライブラリでのコピーは汎用的で安全ですが、大量のファイルを扱う場合はやや遅く感じることがあります。その場合、以下のような工夫が考えられます。

  • ファイルサイズを事前に確認し、小さいものだけを対象にする
  • 並列処理(スレッドやマルチプロセス)を使って複数のコピーを同時に実行する
  • 外部ライブラリ(例:rsyncrobocopyなどOS依存コマンド)を使う

ただし、速度と安全性はトレードオフの関係になるため、慎重な設計が求められます。


まとめ

Pythonでファイルをコピーする方法には、目的に応じて複数の選択肢があります。基本的にはshutilモジュールを使えば十分であり、copycopy2copyfileなどの関数を状況に応じて使い分けましょう。また、フォルダのコピーや条件付きコピーなど、実務に直結する応用も可能です。

Pythonによるファイル操作を習得することで、自動化スクリプトの幅が広がり、業務効率が格段に向上します。ぜひ今回紹介したコードを参考に、自分なりのユースケースに落とし込んでみてください。

タイトルとURLをコピーしました