概要

Pythonでディレクトリを作成する際、存在しない親ディレクトリも一緒に作成したいことがよくあります。mkdir -pに相当するPythonの方法としては、os.makedirspathlib.Path.mkdirが一般的です。これらの関数は、ディレクトリが存在しない場合に親ディレクトリを含めて一度に作成でき、Python 3.5以降ではより簡潔に利用できます。

os.makedirs()を使った方法

os.makedirs()は、指定したパスに存在しないディレクトリをすべて作成する関数です。特にexist_ok=Trueを指定すると、ディレクトリが既に存在していてもエラーが発生しません。

import os
os.makedirs('/path/to/nested/directory', exist_ok=True)

このコードは、指定したパスに必要なディレクトリが存在しない場合にすべて作成します。また、exist_ok=Trueを設定することで、既にディレクトリが存在しても安全にスキップされます。

エラーハンドリング

os.makedirsを使う場合、競合や権限の問題によってエラーが発生することがあります。そのため、try-exceptブロックでエラーハンドリングを行うのがベストプラクティスです。

import os
try:
    os.makedirs('/path/to/nested/directory')
except OSError as e:
    if e.errno != errno.EEXIST:
        raise

この方法では、ディレクトリが既に存在している場合には無視し、それ以外のエラーのみを処理します。

pathlib.Path.mkdir()を使った方法

Python 3.5以降では、pathlibモジュールを使用して、より直感的にディレクトリを作成することができます。Pathオブジェクトを利用することで、ファイルやディレクトリ操作をオブジェクト指向的に扱えるようになります。

from pathlib import Path
Path('/path/to/nested/directory').mkdir(parents=True, exist_ok=True)

parents=Trueを指定することで、親ディレクトリが存在しない場合もすべて自動的に作成します。また、exist_ok=Trueを使用することで、すでにディレクトリが存在していてもエラーを回避します。

まとめ

Pythonでディレクトリを作成する際、os.makedirs()pathlib.Path.mkdir()はどちらも有効な手段です。特にPython 3.5以降では、pathlibを使うことでより直感的で柔軟な操作が可能です。ディレクトリの存在確認やエラーハンドリングを適切に行うことで、安全かつ効率的なファイル操作が実現できます。