【Python】os.makedirs()でフォルダ(ディレクトリ)の作成

【Python】os.makedirs()でフォルダ(ディレクトリ)の自動作成

フォルダ(ディレクトリ)を自動で作成して、さらにその中にファイルを作成したいことってありませんか?
今回はPythonを使ってフォルダ(ディレクトリ)を自動で作成する方法について具体的に解説していきたいと思います。作成したフォルダ(ディレクトリ)にファイルを作成・移動する方法も合わせて説明します。

Pythonでフォルダ(ディレクトリ)とファイルを作成できるようになると、フォルダ作成→データ解析結果をフォルダに格納 といったデータ解析でよくあるフローを身につけることができます!

動作検証済み環境

macOS Catalina(10.15.7), python3.7.6, Jupyter Notebook

フォルダ(ディレクトリ)をPythonで作成する方法

フォルダ(ディレクトリ)を作成するには、標準搭載のosライブラリのmakedirs()関数を使うと簡単に実現します。
以下のようなコードで新規のフォルダを作成できますよ。

import os

dir_path =  'newdir'

os.makedirs(dir_path, exist_ok=True)

実際にフォルダ(ディレクトリ)を作成するコードを実行してみよう

上で記述したコードはmake_dir.ipynbという名前のjupyter notebookファイルとして、Desktop/LabCode/python/python-basis/make-dirに保存します。

このコードを実行するのは簡単で、jupyter notebookのRunボタンを押すだけです。

実行結果

pythonでフォルダを作成した結果

newdirという名前のフォルダがmake_dir.ipynbと同じ階層にできています!

コードの解説

import os

osライブラリをインポートしています。
osライブラリはpythonに標準で搭載されているので、pip installの手続きは不要です。

dir_path =  'newdir'

作成するフォルダ(ディレクトリ)の名前をdir_pathという名前の変数に格納しています。
ここをnewdirという名前から自身が作成したいフォルダ名に変更してください。

os.makedirs(dir_path, exist_ok=True)

ここが今回核となるコードです。
os.makedirs(dir_path)でフォルダを新規作成できます。
ただ、一度フォルダが作成された後にもう一度実行すると「すでにフォルダはあるよ!」という旨のエラーが出てしまうので、exist_ok=Trueという第二引数を追加します。
こうすることで、すでにフォルダが作成されている場合はフォルダ作成をしないように自動で対応してくれます。

深い階層のフォルダ(ディレクトリ)を作成する方法

フォルダの中にもフォルダを作成したいという要望はたまにあります。
そういうときも、上で紹介したmakedirs()を使えば解決します。
具体的には以下のようにコードを記述するだけですみます。

import os

dir_path =  "newdir/subdir"

os.makedirs(dir_path, exist_ok=True)

dir_path = "newdir/subdir" とパスの階層を一つ深くするだけです。
さらに深い階層にフォルダを作成したい場合は、dir_path = "newdir/subdir/subsubdir"とすれば解決です。

※今回フォルダ名は仮ですので、ご自身で実装される際にはご自身で好きな名前に変更しましょう

余談

os.mkdir()という関数でもフォルダを作成することはできますが、os.makedirs()のexist_okのようなフォルダの存在確認をしてくれる機能がありません。なので、if not os.path.exists(dir_name): のようなフォルダの存在確認をする冗長な記述をする必要があります。
また、os.mkdir()は深い階層のフォルダ作成ができません。
このような理由から、フォルダ作成の際は上位互換に値するos.makedirs()を使えば良いと思います。

フォルダ(ディレクトリ)を作成し、そのフォルダ内にファイルを作成する方法

フォルダを作成し、そのフォルダの中にファイルを作成コードは次のようになります。

import os

dir_path =  'newdir'
os.makedirs(dir_path, exist_ok=True)

with open(dir_path+'/memo.csv', 'w') as outfile:
    outfile.write('this is a memo file.')

ファイルの作成する方は別記事に譲るとして、指定したフォルダにファイルを作成するのはとても簡単で、
open(dir_path+'/memo.csv', 'w') のように書き出したいファイルのパス(置き場所)をちゃんと指定してあげるだけです。

dir_path+'/memo.csv' は具体的には'newdir/memo.csv' となるので、newdirの中にmemo.csv を作成するということを意味します。

作成したフォルダ(ディレクトリ)にファイルを移動する方法

ファイルを移動させるにはshutilライブラリのmove()関数を用います。

make_dir.ipynbがあるDesktop/LabCode/python/python-basis/make-dirmemo.csvというファイルがあるとします。
このCSVファイルを新規作成するnewdir内に移動させるためのコードは以下のようになります。

import os
import shutil

dir_path = 'newdir'
os.makedirs(dir_path, exist_ok=True)

shutil.move('./memo.csv', dir_path+'/memo.csv')

shutil.move('memo.csv', dir_path+'/memo.csv') の第一引数に移動前のパス、第二引数に移動先のパスを書きます。
移動前はake_dir.ipynbと同じ階層にあるので、'./memo.csv' とだけ記述します。もしくは'memo.csv'とします。
移動先はnewdir内にしたいので、dir_path+'/memo.csv'と記述します。

これを実行すると、もともとDesktop/LabCode/python/python-basis/make-dirにあったmemo.csvファイルがDesktop/LabCode/python/python-basis/make-dir/newdirに移動します!

最後に

以上のようなPythonを使ったフォルダ(ディレクトリ)作成とファイルの移動・作成の操作は、データ解析をする上でかかせない技術となりますので、ぜひ使えるようにしましょう!