[解決!Python]ディレクトリを作成/削除するには:osモジュール編:解決!Python
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モジュールを使用する
- pathlibモジュールを使用する
- shutilモジュールを使用する(再帰的なディレクトリ削除)
本稿ではこのうちosモジュールを使用する方法とshutilモジュールのrmtree関数を使ってディレクトリを再帰的に削除する方法を紹介する。
os.mkdir関数を使ったディレクトリ作成
ディレクトリを作成/削除するには、osモジュールが提供する以下の関数を使う。
- os.mkdir関数:ディレクトリを作成
- os.makedirs関数:ディレクトリを再帰的に作成(複数階層のディレクトリ作成)
- os.rmdir関数:ディレクトリを削除
- os.removedirs関数:ディレクトリを再帰的に削除(複数階層のディレクトリ削除)
まずは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モジュールを使ったディレクトリの作成/削除については別稿で紹介する)。
os.rmdir関数を使ったディレクトリ削除
上で作成したsample_dirディレクトリを削除するには、os.rmdir関数にそのディレクトリを指定するだけだ。以下に例を示す。
target_dir = 'sample_dir'
os.rmdir(target_dir)
存在しないディレクトリを削除しようとしたときには、FileNotFoundError例外が発生する。また、削除対象のディレクトリは空である必要がある。つまり、ファイルやディレクトリを含まないディレクトリしか削除できない(空でないディレクトリを削除しようとするとOSError例外が発生し、ディレクトリが空ではないというメッセージが伝えられる)。
os.makedirs関数を使った再帰的なディレクトリ作成
Copyright© Digital Advantage Corp. All Rights Reserved.