Pythonでファイルのコピー処理

Pythonでファイルのコピー処理

Pythonでファイルのコピー処理を行うには、標準ライブラリの shutil モジュールを利用するのが一般的です。
shutil モジュールは、ファイルやディレクトリの操作に便利な関数を提供しています。
以下に、Python 3でファイルをコピーする方法について説明します。

まず、shutil モジュールをインポートします。
このモジュールには、copy や copy2 といった関数が含まれており、これらを使ってファイルのコピーができます。

import shutil

次に、shutil.copy 関数を使用してファイルをコピーします。
shutil.copy は、指定されたソースファイルをターゲットファイルにコピーします。
この関数は、コピーする際にファイルのパーミッション(アクセス権)も維持しますが、メタデータ(作成日時や最終アクセス日時など)はコピーしません。
メタデータもコピーしたい場合は、shutil.copy2 を使用するのが良いでしょう。

以下は、ファイルをコピーするための基本的なコード例です。

import shutil

# コピー元ファイルのパス
src_file = 'path/to/source/file.txt'

# コピー先ファイルのパス
dst_file = 'path/to/destination/file.txt'

# ファイルをコピーする
shutil.copy(src_file, dst_file)

このコードでは、src_file で指定されたファイルが dst_file にコピーされます。

また、ディレクトリをコピーする場合には、shutil.copytree 関数を使用します。
この関数は、ソースディレクトリ内の全てのファイルとサブディレクトリをターゲットディレクトリにコピーします。
以下はディレクトリをコピーするためのコード例です。

import shutil

# コピー元ディレクトリのパス
src_dir = 'path/to/source/directory'

# コピー先ディレクトリのパス
dst_dir = 'path/to/destination/directory'

# ディレクトリをコピーする
shutil.copytree(src_dir, dst_dir)

shutil.copytree は、ターゲットディレクトリが存在しない場合にのみコピーを行います。
ターゲットディレクトリがすでに存在する場合には FileExistsError が発生します。
この場合には、ターゲットディレクトリを先に削除するか、別のディレクトリ名を指定する必要があります。

ファイルやディレクトリのコピー処理を行う際には、ファイルパスやディレクトリパスが正しいことを確認することが重要です。
特にファイルの存在確認やディレクトリの書き込み権限など、予期しないエラーを避けるためのエラーハンドリングを行うことも考慮する必要があります。

エラーハンドリングの例としては、以下のように try と except を使用してファイル操作を行うことができます。

import shutil
import os

src_file = 'path/to/source/file.txt'
dst_file = 'path/to/destination/file.txt'

try:
  shutil.copy(src_file, dst_file)
  print(f"File copied from {src_file} to {dst_file}")
except FileNotFoundError:
  print(f"Source file {src_file} does not exist")
except PermissionError:
  print(f"Permission denied while copying {src_file}")
except Exception as e:
  print(f"An error occurred: {e}")

このようにすることで、ファイルコピー処理中に発生する可能性のある一般的なエラーを適切に処理し、ユーザーに有用な情報を提供することができます。