ディレクトリの作成と削除

Python の os モジュールで用意されている os.mkdir 関数と os.makedirs 関数を使って新しいディレクトリを作成する方法、 os.rmdir 関数で作成済みのディレクトリを削除する方法、そして shutil モジュールで用意されている shutil.rmtree 関数を使ってディレクトリと中身をまとめて削除する方法について解説します。

※ pathlib モジュールを使ってディレクトリを作成したり削除したりする方法については「ディレクトリの作成と削除(pathlibモジュール)」を参照されてください。

(Last modified: )

ディレクトリを作成する

新しいディレクトリを作成するには os モジュールで用意されている mkdir 関数を使います。

os.mkdir(path, mode=0o777, *, dir_fd=None)

1 番目の引数に指定したパスが示すディレクトリを作成します。省略可能な 2 番目の引数には、作成するディレクトリの権限を設定します(省略された場合は 8 進数で 0o777 が設定されます)。

例えば次のように記述します。

import os

path = './test/movie'
os.mkdir(path)

mkdir 関数の場合、中間ディレクトリを作成することができません。例えば c:\test\img\back\2020 というディレクトリを作成するときに c:\test\img\back ディレクトリが存在していないと FileNotFoundError が発生します。

import os

path = './test/img/back/2020'
os.mkdir(path)
>> FileNotFoundError: [WinError 3] 指定されたパスが見つかりません。: './test/img/back/2020'

また作成しようとしたディレクトリが既に作成されている場合は FileExistsError が発生します。

import os

path = './test/img'
os.mkdir(path)
>> FileExistsError: [WinError 183] 既に存在するファイルを作成することはできません。: './test/img'

サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 sample8-1.py という名前で保存します。

import os

path = './test/movie'
os.mkdir(path)

プログラムと同じディレクトリの中に test という名前のディレクトリがあり、 test ディレクトリの中に次のようにファイルとディレクトリが含まれています。

ディレクトリを作成する(1)

その後で、次のように実行してください。

python sample8-1.py

ディレクトリを作成する(2)

指定のパスが示すディレクトリが新しく作成されました。

ディレクトリを作成する(3)

中間ディレクトリも同時に作成する

ディレクトリを作成するもう一つの方法は os モジュールで用意されている makedirs 関数を使います。 makedirs 関数の場合は、必要であれば中間ディレクトリも同時に作成します。

os.makedirs(name, mode=0o777, exist_ok=False)

1 番目の引数に指定したパスが示すディレクトリを作成します。省略可能な 2 番目の引数には、作成するディレクトリの権限を設定します(省略された場合は 8 進数で 0o777 が設定されます)。省略可能な 3 番目の引数に True を指定すると、作成しようとするディレクトリが既に存在してもエラーが発生しません。

例えば次のように記述します。

import os

path = './test/movie'
os.makedirs(path)

makedirs 関数の場合、必要であれば中間ディレクトリを自動的に作成します。例えば './test/movie/back/2020' というディレクトリを作成するときに './test/movie/back' ディレクトリが存在していない場合、先に中間ディレクトリである './test/movie/back' ディレクトリを作成したあとで指定のパスのディレクトリを作成します。

import os

path = './test/movie/back/2020'
os.makedirs(path)

また作成しようとしたディレクトリが既に作成されている場合、引数を省略するか明示的に exist_ok=False を設定すると FileExistsError が発生します。引数で exist_ok=True を設定すると、既にディレクトリが存在していてもエラーにはなりません。

import os

path = './test/movie'
os.makedirs(path, exist_ok=True)
サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 sample8-2.py という名前で保存します。

import os

path = './test/code/python/2019'
os.makedirs(path, exist_ok=True)

プログラムと同じディレクトリの中に test という名前のディレクトリがあり、 test ディレクトリの中に次のようにファイルとディレクトリが含まれています。

中間ディレクトリも同時に作成する(4)

その後で、次のように実行してください。

python sample8-2.py

中間ディレクトリも同時に作成する(5)

2019 ディレクトリの親ディレクトリである python ディレクトリ、そして python ディレクトリの親ディレクトリである code ディレクトリをそれぞれ作成しました。

中間ディレクトリも同時に作成する(6)

ディレクトリを削除する

ディレクトリを削除するには os モジュールで用意されている rmdir 関数を使用します。

os.rmdir(path, *, dir_fd=None)

1 番目の引数に指定したパスが示すディレクトリを削除します。ディレクトリを削除するには、ディレクトリの中身が空である必要があります。

例えば次のように記述します。

import os

path = './test/movie'
os.rmdir(path)

削除するディレクトリが空でない場合、 OSError が発生します。

import os

path = './test/doc'
os.rmdir(path)
>> OSError: [WinError 145] ディレクトリが空ではありません。: './test/doc'

サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 sample8-3.py という名前で保存します。

import os

path = './test/movie'
os.rmdir(path)

プログラムと同じディレクトリの中に test という名前のディレクトリがあり、 test ディレクトリの中に次のようにファイルとディレクトリが含まれています。

ディレクトリを削除する(1)

その後で、次のように実行してください。

python sample8-3.py

ディレクトリを削除する(2)

パスが示すディレクトリが削除されました。

ディレクトリを削除する(3)

ディレクトリとディレクトリの中身をまとめて削除する

ディレクトリを格納されているファイル毎まとめて削除するには shutil モジュールで用意されている rmtree 関数を使用します。

shutil.rmtree(path, ignore_errors=False, onerror=None)

1 番目の引数に指定したパスが示すディレクトリを削除します。ディレクトリにファイルやディレクトリが含まれていた場合はまとめて削除されます。

例えば次のように記述します。

import shutil

path = './test/movie'
shutil.rmtree(path)
サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 sample8-4.py という名前で保存します。

import shutil

path = './test/movie'
shutil.rmtree(path)

プログラムと同じディレクトリの中に test という名前のディレクトリがあり、 test ディレクトリの中に movie ディレクトリが含まれています。

ディレクトリとディレクトリの中身をまとめて削除する(1)

movie ディレクトリの中にはファイルがいくつかとディレクトリが含まれています。このディレクトリの中にもファイルが含まれています。

ディレクトリとディレクトリの中身をまとめて削除する(2)

その後で、次のように実行してください。

python sample8-4.py

ディレクトリとディレクトリの中身をまとめて削除する(3)

パスが示すディレクトリが、ディレクトリの中に格納されていたファイルなども含めてまとめて削除されました。

ディレクトリとディレクトリの中身をまとめて削除する(4)

-- --

Python を使って新しいディレクトリを作成する方法、および作成済みのディレクトリを削除する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。