osモジュールのmkdir/rmdir/makedirs/removedirs関数とshutilモジュールのrmtree関数を使って、ディレクトリを作成/削除する方法を紹介。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
import os
# os.mkdir関数を使ったディレクトリ作成
target_dir = 'sample_dir'
os.mkdir(target_dir)
os.mkdir(target_dir) # FileExistsError
# os.rmdir関数を使ったディレクトリ削除
target_dir = 'sample_dir'
os.rmdir(target_dir)
# os.makedirs関数を使った再帰的なディレクトリ作成
target_dir = 'sample_dir/dir2/dir3'
os.makedirs(target_dir)
# os.rmdir関数は空でないディレクトリは削除できない
target_dir = 'sample_dir/dir2'
os.rmdir(target_dir) # OSError:dir2ディレクトリにはdir3ディレクトリがある
# os.removedirs関数を使った再帰的なディレクトリ削除
os.removedirs(target_dir) # 最下層のディレクトリから順に削除していく
# os.removedirs関数は途中に空でないディレクトリがあるとそこで削除を終了する
target_dir = 'sample_dir/dir2/dir3'
os.makedirs(target_dir)
os.mkdir('sample_dir/dir2/foo')
os.removedirs(target_dir) # dir3を削除した後、dir2が空ではないので削除できない
# 指定したディレクトリの内容を全て削除する
import shutil
shutil.rmtree('sample_dir')
Pythonのコードからファイルシステム上でディレクトリを作成したり削除したりするには幾つかの方法がある。
本稿ではこのうちosモジュールを使用する方法とshutilモジュールのrmtree関数を使ってディレクトリを再帰的に削除する方法を紹介する。
ディレクトリを作成/削除するには、osモジュールが提供する以下の関数を使う。
まずはos.mkdir関数を使ってディレクトリを作成し、os.rmdir関数を使ってそのディレクトリを削除してみよう。
os.mkdir関数の一番簡単な使い方は作成したいディレクトリの名前を引数に指定することだ。以下に例を示す。
import os
target_dir = 'sample_dir'
os.mkdir(target_dir)
os.mkdir(target_dir) # FileExistsError
この例はカレントディレクトリにsample_dirという名前のディレクトリを作成するものだ。os.mkdir関数は既に存在するディレクトリを作成しようとすると、FileExistsError例外となる点には注意しよう。例外を回避するのであれば、以下のようにos.pathモジュールのexists関数を使用して、ディレクトリがないことを確認する。
if not os.path.exists(target_dir):
os.mkdir(target_dir)
else:
print(f'{target_dir} already exists')
あるいは、pathlibモジュールのPathクラスのインスタンスが持つmkdirメソッドにはexist_okパラメーターがあり、これにTrueを指定すると既存のディレクトリを作成しようとしたときに例外が発生しないようになる(pathlibモジュールを使ったディレクトリの作成/削除については別稿で紹介する)。
上で作成したsample_dirディレクトリを削除するには、os.rmdir関数にそのディレクトリを指定するだけだ。以下に例を示す。
target_dir = 'sample_dir'
os.rmdir(target_dir)
存在しないディレクトリを削除しようとしたときには、FileNotFoundError例外が発生する。また、削除対象のディレクトリは空である必要がある。つまり、ファイルやディレクトリを含まないディレクトリしか削除できない(空でないディレクトリを削除しようとするとOSError例外が発生し、ディレクトリが空ではないというメッセージが伝えられる)。
Copyright© Digital Advantage Corp. All Rights Reserved.