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

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

フォルダ(ディレクトリ)を自動で作成して、その中にファイルを書き出したいことってありませんか?
今回はPythonを使ってフォルダ(ディレクトリ)を自動で作成する方法について具体的に解説していきたいと思います。作成したフォルダにファイルを書き出す・移動する方法も合わせて説明します。
自動でフォルダを作成できるようになると、フォルダ作成→データ解析結果をフォルダに格納 といったデータ解析でよくあるフローを身に着けることができます。

動作検証済み環境
macOS Catalina(10.15.7), python3.7.6, Jupyter Notebook

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

フォルダを作成するには、標準搭載の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'と記述します。