注目キーワード

【Python】スクリプトからディレクトリをmkdirで作成する

様々なデータの入力・出力をPythonで扱っていると、今作業をしているディレクトリ以下にいくつかのディレクトリを作成する場合があります。例えば画像を出力して保存するためのフォルダを作ったり、加工したデータを保存するためのディレクトリを作ったりします。

こちらの記事ではPythonでプログラムを書いている時にディレクトリ(フォルダ)を作成する方法を見ていきます。

mkdirを使ってディレクトリを作成する

Pythonの標準ライブラリとして、os.mkdir os.makedirs を使ってディレクトリを作成することができます。サンプルから見てみましょう。

サンプルソース

サンプルの実装です。カレントディレクトリの直下に test という新しいディレクトリを作成します。

os.mkdirを使って path のディレクトリを作成しています。mkdirはディレクトリが既に存在している場合には FileExistsError を返すので、try-exceptで例外処理を書いてあります。

実行結果

1回目に実行した場合と、2回目に実行した場合の結果を確認してみます。

1回目の実行(成功)

1回目実行した場合には、無事 test を作成できています。2回目実行すると次のようになります。既に test ディレクトリが存在したため、except側で実行されました。

2回目の実行(失敗)

深い階層のディレクトリを作成した場合の結果

mkdirは深い階層のディレクトリを作成する場合、途中のディレクトリが全て存在していないと FileNotFoundError を返します。サンプルソースを見てみます。

先程の例に加えてもう一つ新しく FileNotFoundError を try-except に追加しました。今作成しようとしている ./not-exists/test という新しいディレクトリに対して、./not-exists/ が存在しないため、実行すると次のような結果となります。

深い階層を処理した場合の実行結果

makedirsを利用して深い階層のディレクトリを作成する

os.mkdir の代わりに os.makedirs を用いることで、深い階層のディレクトリを直接作成することができます。

サンプルソース

サンプルの実装です。今回はtry-exceptを書かず、簡易的に実装しています。

実行結果

実行結果です。

スポンサーリンク

深い階層のディレクトリを作成した結果

作成したディレクトリを確認するためにカレントディレクトリでtreeコマンドを実行した結果は次のようになります。not-existsとtestディレクトリの両方が階層的に作成できたことが分かります。

階層を出力した様子

ファイルの出力先などをプログラムで自動的に作成するために、いろんなパスにディレクトリを作成することはよくあります。必要に応じてmkdir/makedirsを使って見てくださいね。