Categories: Python

【Python】ディレクトリを作成する方法

この記事では、Pythonのコード内からディレクトリを作成する方法を紹介します。

ソースコード内からディレクトリを1つ作成するには、osモジュールのmkdir関数を使います。また、末端ディレクトリを作成するために指定したパス通りに中間ディレクトリも再帰的に作成してくれるmakedirs関数も用意されています。

それでは、それぞれ詳しく見ていきましょう!

パスを指定して作成する[mkdir関数]

osモジュールのmkdir関数を使うことでディレクトリを作成できます。

import os

os.mkdir(path, mode=0o777, *, dir_fd=None)
ポイント
  • path引数には、作成するディレクトリのパスを相対パス、または絶対パスで指定する
  • すでに同じパスのディレクトリが存在している場合はFileExistsError、パスが間違っている場合は、FileNotFoundErrorが送出される

例としてデスクトップにディレクトリを作成してみる :

import os

# デスクトップのパス
desktop_path = '/Users/ユーザー名/Desktop'

# ディレクトリ名
dir_name = 'dir'

# パスの作成
dir_path = os.path.join(desktop_path, dir_name)

# ディレクトリの作成
os.mkdir(dir_path)

上記のコードをターミナルなどで実行してみてください。

画像のようにデスクトップに「dirディレクトリ」を作成することができました。

パスを指定して再帰的に作成する[makedirs関数]

先ほどの方法ではサブディレクトリを作成しようとすると2回同じようなコードを書く必要があります。それは面倒なので引数に指定したパス通りにディレクトリを作成してくれるos.makedirs関数を使うと楽ちんです。

osモジュールのmakedirs関数は、パスで指定した末端ディレクトリとの間にある存在していないディレクトリもまとめて作成することができます。

import os

os.makedirs(name, mode=0o777, exist_ok=False)
ポイント
  • name引数に指定したパス通りに再帰的にディレクトリが作成されます。
  • exist_ok引数をTrueにすることで同じパスのディレクトリが存在していたとしてもエラーを発生させないようにできます。(Python 3.2で追加)

例としてデスクトップにディレクトリとサブディレクトリを作成してみます:

import os

# デスクトップのパス
path = '/Users/ユーザー名/Desktop'

# デスクトップに作成するディレクトリ名
dir_name1 = 'dir'

# dirディレクトリ内に作成するサブディレクトリ名
dir_name2 = 'sub_dir'

# ディレクトリの作成
os.makedirs(os.path.join(path, dir_name1, dir_name2))

このコードを実行するとデスクトップに下の画像のようなディレクトリが作成されます。

「dirディレクトリ」内に「sub_dirディレクトリ」が作成されています。

まとめ

今回はソースコード内からディレクトリを作成する方法を解説しました。

コード内からディレクトリを操作することでログや設定ファイルを保存するディレクトリを外部に生成したりすることができます。

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

Linkディレクトリを削除する方法

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

4か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago