ユーニックス総合研究所

  • home
  • archives
  • python-make-multi-folder

Pythonで複数のフォルダを作成する方法【os.mkdir, os.makedirs】

  • 作成日: 2022-05-02
  • 更新日: 2023-12-24
  • カテゴリ: Python

Pythonで複数のフォルダを作成する

Pythonではosモジュールにある関数(mkdir, makedirsなど)を使うとフォルダ(ディレクトリ)を作成することができます。
フォルダの作成でよく行われるのが複数のフォルダを作成することです。

今回はPythonで複数のフォルダを作成するという点に注目して、これらの関数の使い方を解説していきます。

関連記事

頭が悪い人のPythonのevalの使い方
頭がいい人のPythonのexitの使い方
状態遷移による文字列パースのテクニック【Python】

頭が悪い人のPythonのevalの使い方
頭がいい人のPythonのexitの使い方
状態遷移による文字列パースのテクニック【Python】

頭が悪い人のPythonのevalの使い方
頭がいい人のPythonのexitの使い方

mkdirで複数のフォルダを作成する

os.mkdir()でフォルダを作成できます。
しかしこの関数は標準で複数のフォルダの作成に対応していません。

そのためos.mkdir()で複数のフォルダを作成したい場合は、os.mkdir()を複数回呼び出す必要があります。

リスト内のファイル名をmkdirで作成する

ここではリストにフォルダ名を複数定義して、そのフォルダ名のフォルダをos.mkdir()で作成してみたいと思います。
その場合は↓のようにコードを書きます。

import os  

folder_names = ['folder0', 'folder1', 'folder2']  

for folder_name in folder_names:  
    os.mkdir(folder_name)  

このコードを実行すると現在のディレクトリ以下にフォルダーが複数作成されます。

$ ls  
folder0  
folder1  
folder2  

for文でフォルダ名を作成し、mkdirでフォルダを作成する

あるいは自動化してfor文でフォルダ名を作成する場合もあります。
その場合はfor文で得られたカウント変数をフォルダ名に採用します。

↓のようなコードを書きます。

import os  

for i in range(4):  
    folder_name = f'myfolder{i}'  
    os.mkdir(folder_name)  
$ ls  
myfolder0  
myfolder1  
myfolder2  
myfolder3  

uuidでランダムで一意な名前のフォルダを作成する

Pythonの標準にあるuuidというすばらしいモジュールを使うと、一意の名前を生成することができます。
たとえばuuidの出力は↓のようになります。

import uuid  

print(uuid.uuid4())  
cba87147-434c-41a8-9fe2-33deb3a2689a  

このuuid.uuid4()が生成する識別子は一意でランダムです。
これを使えば適当な名前のフォルダを複数作成することもできます。

たとえばfor文を使いましょう。

import uuid  
import os  

for _ in range(4):  
    folder_name = str(uuid.uuid4())  
    os.mkdir(folder_name)  
$ ls  
000bbb11-c1f1-44ee-b643-ca11c9840d5f  
90eb4d97-2a26-4ed3-ae30-8713b6c39e82  
af726b65-b5b7-4cfd-acd8-5ed19e752261  
9de6fe81-c7b1-4def-a105-3172c64e8998  

↑のように適当な名前のフォルダが一気に作成できます。

os.makedirsで階層のあるフォルダを作成する

os.makedirs()はパスの途中の階層にあるフォルダも一気に作成できます。
つまりこれを使えば複数のフォルダが入れ子になっている場合に便利です。

↓のように使います。

import os  

path = 'parent/child/folder'  

os.makedirs(path)  

↑の場合、パスに含まれているparentchildfolderもフォルダーです。
このようなパスをmakedirsに渡すと再帰的にフォルダ階層を作成してくれます。

$ ls -R  
./parent:  
child  

./parent/child:  
folder  

./parent/child/folder:  

os.makedirsは同じパスを2回渡すと例外が飛んできてエラーになります。
これはos.makedirsがすでに存在するフォルダを作成できないからです。

path = 'sudeni/sonzai/suruyo'  
os.makedirs(path)  

try:  
    os.makedirs(path)  
except FileExistsError as e:  
    print(e)  
    # [Errno 17] File exists: 'sudeni/sonzai/suruyo'  

exist_okフラグをTrueにしておくとこのようなエラーは飛んでこなくなります。

os.makedirs(path, exist_ok=True)  

おわりに

今回はPythonで複数のフォルダを作成する方法について解説しました。
フォルダを作成したり削除したりできるようになっておくと、プログラムの設計もはかどるかと思います。
ホームフォルダに設定ファイルを作ったりするときとかですね。

🦝 < 複数のフォルダをデプロイ(配置)

🐭 < ターン終了だ