shutil.rmtree関数でディレクトリ削除を再帰的に行う

shutil.rmtree関数を使えば、ディレクトリの中にファイルやサブディレクトリが入っているときに、再帰的処理を行って削除することができます。

要するに、指定したディレクトリを中身もろともごっそり削除できるというわけです。

(実験)
まず、シェルコマンドにて、テスト用のディレクトリやファイルを作成する。

$ mkdir -p a/b/c/d/e
$ touch a/a.txt
$ touch a/b/b.txt
$ touch a/b/c/c.txt
$ touch a/b/c/d/d.txt
$ touch a/b/c/d/e/e.txt

対話モードPythonで、ディレクトリaをごっそり削除してみます。

>>> import shutil, glob
>>> glob.glob('*')
['a'] ※最初はディレクトリaがある
>>> shutil.rmtree('a')
>>> glob.glob('*')
[] ※ディレクトリaが削除された

ディレクトリの中身だけを削除する

指定したディレクトリは残したまま、中身だけを削除したい時、

>>> shutil.rmtree('a/*')

とやってもエラーになります。

こんな時は、ディレクトリの中身をリストアップして各要素を調べ、ディレクトリならばshutil.rmtree関数を、通常ファイルならos.remove関数を使えば上手く行きます。

しかし、これでは処理が煩雑でプログラムも長くなってしまうので、shutil.rmtreeで指定ディレクトリを削除した後、os.makedirsで指定ディレクトリを再作成する方が簡単です。