高校生物550643 views
世界の国562456 views
雑学1473151 views
高校国語786851 views
中学理科1628645 views
中学数学622525 views
小学算数1197982 views
数学講師2870390 views
小学社会309222 views
LaTeX959517 views

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 を指定すると、既存ディレクトリにマージできる。