Pythonでファイル・ディレクトリを削除する方法(os.remove, shutil.rmtree)

Pythonでファイルやディレクトリを削除する際に使用する主要な関数について、実用的なサンプルコードと共に詳しく解説します。

ファイル削除の基本:os.remove()

単一のファイルを削除する場合はos.remove()を使用します。

import os

# ファイルを削除
os.remove('sample.txt')

エラーハンドリングを含む安全な削除

import os

try:
    os.remove('sample.txt')
    print("ファイルを削除しました")
except FileNotFoundError:
    print("ファイルが見つかりません")
except PermissionError:
    print("削除権限がありません")

ディレクトリ削除:os.rmdir()とshutil.rmtree()

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

import os

# 空のディレクトリのみ削除可能
os.rmdir('empty_folder')

ディレクトリとその中身を一括削除:shutil.rmtree()

import shutil

# ディレクトリ内のファイル・サブディレクトリも含めて削除
shutil.rmtree('folder_with_files')

存在確認してから削除する方法

ファイルの存在確認

import os

if os.path.exists('sample.txt'):
    os.remove('sample.txt')
    print("削除完了")
else:
    print("ファイルが存在しません")

ディレクトリの存在確認

import shutil
import os

if os.path.isdir('target_folder'):
    shutil.rmtree('target_folder')
    print("ディレクトリを削除しました")

実践的な削除関数の作成

汎用削除関数

import os
import shutil

def safe_delete(path):
    try:
        if os.path.isfile(path):
            os.remove(path)
            return f"ファイル '{path}' を削除しました"
        elif os.path.isdir(path):
            shutil.rmtree(path)
            return f"ディレクトリ '{path}' を削除しました"
        else:
            return f"'{path}' は存在しません"
    except Exception as e:
        return f"削除エラー: {e}"

# 使用例
print(safe_delete('test.txt'))
print(safe_delete('test_folder'))

パターン指定での一括削除

globを使った複数ファイル削除

import glob
import os

# 拡張子指定で削除
txt_files = glob.glob('*.txt')
for file in txt_files:
    os.remove(file)
    print(f"削除: {file}")

条件指定での削除

import os
import time

# 1週間以上古いファイルを削除
current_time = time.time()
week_ago = current_time - (7 * 24 * 60 * 60)

for filename in os.listdir('.'):
    if os.path.isfile(filename):
        if os.path.getmtime(filename) < week_ago:
            os.remove(filename)
            print(f"古いファイルを削除: {filename}")

注意点とベストプラクティス

権限エラーへの対処

Windowsでは読み取り専用ファイルの削除時にエラーが発生する場合があります。

import os
import stat
import shutil

def force_delete(path):
    def handle_remove_readonly(func, path, exc):
        os.chmod(path, stat.S_IWRITE)
        func(path)
    
    if os.path.isdir(path):
        shutil.rmtree(path, onerror=handle_remove_readonly)
    else:
        os.remove(path)

ログ機能付き削除

import os
import logging

logging.basicConfig(level=logging.INFO)

def logged_delete(path):
    try:
        os.remove(path)
        logging.info(f"削除成功: {path}")
    except Exception as e:
        logging.error(f"削除失敗: {path}, エラー: {e}")

まとめ

Pythonでのファイル・ディレクトリ削除には以下の関数を使い分けます:

  • os.remove(): 単一ファイルの削除
  • os.rmdir(): 空ディレクトリの削除
  • shutil.rmtree(): ディレクトリとその中身の一括削除

必ずエラーハンドリングを実装し、削除前の存在確認を行うことで、安全で信頼性の高いコードを作成できます。

らくらくPython塾 – 読むだけでマスター

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座