PYTHON MEBY

Pythonでファイル・ディレクトリのコピー・移動(shutil.copy, shutil.move)

この記事では、Pythonのshutilモジュールを使用してファイルやディレクトリをコピー、移動する方法について説明します。shutil.copy(), shutil.copy2(), shutil.move()の使い方、注意点、そしてエラーハンドリングの方法を学びます。

目次

shutil.copy(): ファイルのコピー

shutil.copy()は、ファイルを別の場所にコピーします。

import shutil
shutil.copy('source.txt', 'destination.txt')

source.txtがコピーされ、destination.txtとして保存されます。

引数には、コピー元のファイルパスとコピー先のファイルパスを指定します。コピー先のファイルが存在する場合は上書きされます。

shutil.copy2(): ファイルのコピー(メタデータ付き)

shutil.copy2()は、shutil.copy()と同様にファイルをコピーしますが、タイムスタンプなどのメタデータもコピーします。

import shutil
shutil.copy2('source.txt', 'destination.txt')

source.txtとそのメタデータがコピーされ、destination.txtとして保存されます。

shutil.move(): ファイルまたはディレクトリの移動

shutil.move()は、ファイルを別の場所に移動します。ディレクトリも移動できます。

import shutil
shutil.move('source.txt', 'destination.txt')

source.txtがdestination.txtに移動します。ファイル名が変更されます。

import shutil
shutil.move('source_dir', 'destination_dir')

source_dirディレクトリがdestination_dirディレクトリに移動します。

注意点

ファイルやディレクトリ操作を行う際の重要な注意点です。

  • コピー先のファイルが存在する場合は上書きされるので注意してください。
  • 移動先のファイルまたはディレクトリが存在する場合、上書きまたはエラーが発生します。
  • 異なるドライブ間でファイルを移動する場合は、shutil.move()はコピーして削除する動作をする場合があります。
  • エラーが発生した場合は、例外処理で適切にキャッチする必要があります。
  • パスは絶対パスまたは相対パスで指定できます。クロスプラットフォームの互換性のため、os.path.join() を使用してパスを構築することを推奨します。

エラーハンドリング

ファイルやディレクトリ操作で発生する可能性のある例外を適切に処理します。

import shutil, os
try:
    shutil.copy('source.txt', 'destination.txt')
except FileNotFoundError:
    print('ファイルが見つかりません')
except PermissionError:
    print('アクセス権がありません')
except Exception as e:
    print(f'エラーが発生しました: {e}')

FileNotFoundError: ファイルが存在しない場合 PermissionError: アクセス権がない場合 その他例外: 予想外のエラーが発生した場合

サンプルコード

以下のサンプルコードでは、カレントディレクトリに'test.txt'というファイルを作成し、それを'test_copy.txt'にコピーします。その後、'test_copy.txt'を'backup'ディレクトリに移動します。

import shutil, os
# test.txtファイルを作成
with open('test.txt', 'w') as f:
    f.write('This is a test file.')

# test.txtをtest_copy.txtにコピー
shutil.copy('test.txt', 'test_copy.txt')

# backupディレクトリを作成(存在しない場合)
if not os.path.exists('backup'):
    os.makedirs('backup')

# test_copy.txtをbackupディレクトリに移動
shutil.move('test_copy.txt', 'backup/')

print('ファイルのコピーと移動が完了しました。')

実行後、カレントディレクトリに'test.txt'と'backup'ディレクトリが存在し、backupディレクトリの中に'test_copy.txt'が存在することを確認できます。

関連記事