Python でファイルを削除・移動・コピーする(shutil)

ファイルの削除・移動・コピーには os モジュールと shutil モジュールを使う。

ファイルを削除する

ファイルの削除には os.remove() を使う。

import os

os.remove('data.txt')

存在しないファイルを削除しようとすると FileNotFoundError が発生するため、事前に存在確認をするか例外処理を行う。

import os

path = 'data.txt'
if os.path.exists(path):
    os.remove(path)

ディレクトリを削除する

空のディレクトリは os.rmdir() で削除できる。中身があるディレクトリを丸ごと削除するには shutil.rmtree() を使う。

import os
import shutil

# 空のディレクトリを削除
os.rmdir('empty_dir')

# 中身ごとディレクトリを削除
shutil.rmtree('mydir')

shutil.rmtree() は強力なので、誤って重要なディレクトリを削除しないよう注意が必要だ。

ファイルを移動する

ファイルの移動には shutil.move() を使う。

import shutil

shutil.move('data.txt', 'backup/data.txt')

移動先にファイル名を含めれば名前を変更しながら移動できる。移動先がディレクトリ名だけなら、元のファイル名で移動される。

ファイルをコピーする

ファイルのコピーには shutil.copy() または shutil.copy2() を使う。

import shutil

# メタデータをコピーしない
shutil.copy('data.txt', 'data_backup.txt')

# メタデータ(更新日時など)も含めてコピー
shutil.copy2('data.txt', 'data_backup.txt')

shutil.copy() はファイルの内容とパーミッションをコピーする。shutil.copy2() はそれに加えて更新日時などのメタデータもコピーする。

ディレクトリをコピーする

ディレクトリを丸ごとコピーするには shutil.copytree() を使う。

import shutil

shutil.copytree('mydir', 'mydir_backup')

コピー先のディレクトリがすでに存在するとエラーになる。Python 3.8 以降では dirs_exist_ok=True を指定すると、既存ディレクトリにマージできる。