Pythonでディレクトリを新規作成する方法について解説します。
使う関数は以下2つで、ディレクトリを一つだけ作成するのか、階層構造のディレクトリを作成するかで使い分けると便利です。
- ディレクトリを一つ新規作成する: os.mkdir()
- 階層構造になった新規ディレクトリを作成する: os.makedirs()
尚、「フォルダ」という言葉もありますが、本記事ではPython公式リファレンスに倣って「ディレクトリ」とします。
ディレクトリを新規に一つ作成する
os.mkdir() を使います。使い方は以下です。
os.mkdir(path, mode=0o777, *, dir_fd=None)
引数pathに作成したいディレクトリ名、またはパスを指定します。パスは相対パスや絶対パスを指定することができ、
- ディレクトリ名だけ、または相対パスを指定した場合はカレントディレクトリに、
- 絶対パスを設定した場合は、指定したディレクトリに
作成されます。
その他のパラメータはデフォルトのままで良いと思います。気になる場合は公式リファレンスを参照ください。
具体的な例を以下に示します。
>>> import os
# ディレクトリ名を指定
>>> os.mkdir('dir01')
# 絶対パスを指定
>>> abspath = os.path.abspath('dir02') # カレントディレクトリの絶対パスを取得
>>> os.mkdir(abspath)
出力結果を以下に示します。
★ターミナルのコマンドライン
$ tree
.
├── dir01 ★ディレクトリ名を指定
└── dir02 ★絶対パスを指定
尚、引数pathで指定した値と同じ名前のディレクトリが既に存在する場合は、FileExistsErrorを返します。
>>> import os
# 上記と同じカレントディレクトリで、同じ名前のディレクトリを指定する
>>> os.mkdir('dir01')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileExistsError: [Errno 17] File exists: 'dir01'
これを利用すると、フォルダの存在を確認しながら処理をすすめることができます。
例えば下記のように、try-except文 を使って指定のディレクトリが既に存在する場合は例外を発生させて、別の処理に誘導するコードも考えられます。
# ディレクトリの存在をチェックする
>>> import os
>>> try:
... os.mkdir('dir01')
... except:
... print('Alerady exist...')
...
Alerady exist...
またこの関数は、階層構造の場合は中間ディレクトリが存在しないため、作成できません。
>>> import os
# 階層構造を指定
>>> path = './sample01/sub02/sub03/sub04'
>>> os.mkdir(path)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: './sample01/sub02/sub03/sub04'
階層構造を使う場合は、次章で解説するos.makedirs()を使います。
階層構造のディレクトリを作成する
os.makedirs() を使います。
公式リファレンスには「再帰的にディレクトリを作成する関数」と説明がありますが、階層構造のディレクトリを生成できます。使い方は以下です。
os.makedirs(name, mode=0o777, exist_ok=False)
引数nameに、生成したいディレクトリのパスを指定します。パスは下記の例のように階層構造のパスを設定出来ます。
>>> import os
# 階層構造のディレクトリを指定
>>> path = "./sub01/sub02/sub03/sub04/"
>>> os.makedirs(path)
出力結果は以下です。
元々存在していなかった中間ディレクトリもきちんと生成されています。
★ターミナルのコマンドライン
$ tree
.
└── sub01
└── sub02
└── sub03
└── sub04
尚、引数exist_ok = Falseとすると、ディレクトリが既に存在した場合にFileExistsErrorを送出します。(デフォルトはこっち)
>>> import os
# 既に存在するパスを指定してみる
>>> path = "./sub01/sub02/sub03/sub04/"
>>> os.makedirs(path)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.8/os.py", line 223, in makedirs
mkdir(name, mode)
FileExistsError: [Errno 17] File exists: './sub01/sub02/sub03/sub04/'
引数exist_ok = Trueの場合は何も送出されません。(上書きもされません)
# 既に存在するパスを指定してみる
>>> os.makedirs(path, exist_ok=True)
>>>
確認した環境
- OS: Ubuntu18.04LTS
- Python3.8.4
まとめ
今回は、ディレクトリの新規作成方法についてまとめました。
- ディレクトリを一つ作成する → os.mkdir()
- 階層構造のディレクトリを作成する → os.makedirs()
ファイルを保存する場合などよく使うと思いますので是非憶えておきたいです。