Pythonを使うとフォルダを作成することができます。
ここではExcelを使って複数フォルダを自動作成する方法を紹介します。
また、同じフォルダが存在するかどうかをチェックしてメッセージ表示させます。
・同一のフォルダが存在していれば、メッセージを表示
それでは以下で詳しく紹介していきます。
目次
Excelデータをもとに複数フォルダを作成するPythonプログラムの概要
1. エクセルの入力内容をもとに親フォルダを設定する
2. 作成したい子フォルダ情報を読み込む
3. フォルダを作成する
4. 同一フォルダの存在があれば、エラーメッセージを表示
上記の作業を実行するpythonプログラムを紹介します。
ちなみに、今回はフォルダA~フォルダDの4つしかフォルダ作成をしていませんが、実際には10コでも100コでも作成することが可能です。
Pythonプログラムを実行するための準備
事前の準備として、2つのライブラリをインストールしておきます。
準備1| openpyxl
準備2| tinker
以下でインストール方法を記載します。
準備1|openpyxlモジュールのインストール
1. コマンドプロンプトを起動(ショートカットキー[windows] + [R])
2. 「cmd」と記入して[Enter]
3. 「pip install openpyxl」と入力して[Enter]
4. インストール完了
これでインストールが完了し、openpyxlを使えるようになります。
準備2|tinkerモジュールのインストール
1. コマンドプロンプトを起動(ショートカットキー[windows] + [R])
2. 「cmd」と記入して[Enter]
3. 「pip install tk」と入力して[Enter]
4. インストール完了
それでは以下でプログラムを解説していきます。
Pythonプログラム解説
この記事で紹介するプログラムを解説しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#プログラム1|ライブラリの設定 import os from openpyxl import load_workbook from tkinter import messagebox #プログラム2|エクセルを読み込む filepath = 'sample.xlsx' wb = load_workbook(filename=filepath) ws = wb['Sheet1'] #プログラム3|エクセルのセルB4以降の値を取得 path = ws['B1'].value cmax = ws.max_row range = 'B4:B' + str(cmax) #プログラム4|同一フォルダの存在を確認するためのリストを設定 existedfolder = [] #プログラム5|既にフォルダが存在していなければフォルダ作成し、存在していればリストに格納 for ranges in ws[range]: folderpath = path + '\\' + ranges[0].value if os.path.exists(folderpath)==False: os.mkdir(folderpath) else: existedfolder.append(ranges[0].value) #プログラム6|既に存在するフォルダが1つ以上あれば、メッセージ表示 if len(existedfolder) > 0: messagebox.showinfo('存在するフォルダがあります', '以下のフォルダは既に存在しています。\n\n'+'\n'.join(existedfolder)) |
以下で詳細の解説をしていきます。
プログラム1|ライブラリの設定
1 2 3 4 |
#プログラム1|ライブラリの設定 import os from openpyxl import load_workbook from tkinter import messagebox |
このプログラムでは、2つのライブラリ設定をします。
1 2 3 4 |
#解説 フォルダを作成するためのライブラリ エクセルを操作するためのライブラリ メッセージ表示するためのライブラリ |
プログラム解説
まず、「import os」でフォルダを作成できるようにします。
次に、「from openpyxl import load_workbook」でExcelを操作できるようにします。
最後に、「from tkinter import messagebox」で、既存フォルダが存在している場合のエラーメッセージ表示をします。
プログラム2|エクセルを読み込む
1 2 3 4 |
#プログラム2|エクセルを読み込む filepath = 'sample.xlsx' wb = load_workbook(filename=filepath) ws = wb['Sheet1'] |
1 2 3 4 |
#解説 変数filepathに「'sample.xlsx'」を設定 「sample.xlsx」を読み込んで、変数wb1として設定 「sample.xlsx」の「Sheet1」を変数ws1として設定 |
今回使うエクセルファイルは、pythonプログラムと同じフォルダに保存しておきます。
もし違うフォルダで保存したい場合は、「C:\Users\xxx\Dropbox\Python\Program\100_Excel\108_Excel_CreateFolders\Folder\sample.xlsx」のようなフルパスを設定する方法があります。
プログラム3|エクセルのセルB4以降の値を取得
1 2 3 4 |
#プログラム3|エクセルのセルB4以降の値を取得 path = ws['B1'].value cmax = ws.max_row range = 'B4:B' + str(cmax) |
1 2 3 4 |
#解説 変数pathにセルB1の値を入れる 変数cmaxに最終行を設定 変数rangeにセルB4~Bcmaxのセル範囲を設定 |
プログラム4|同一フォルダの存在を確認するためのリストを設定
1 2 |
#プログラム4|同一フォルダの存在を確認するためのリストを設定 existedfolder = [] |
1 2 |
#解説 変数existedfolderをリストとして設定 |
プログラム5|既にフォルダが存在していなければフォルダ作成し、存在していればリストに格納
1 2 3 4 5 6 7 |
#プログラム5|既にフォルダが存在していなければフォルダ作成し、存在していればリストに格納 for ranges in ws[range]: folderpath = path + '\\' + ranges[0].value if os.path.exists(folderpath)==False: os.mkdir(folderpath) else: existedfolder.append(ranges[0].value) |
1 2 3 4 5 6 7 |
#解説 ws(シート1)のrange(セルB4~Bcmax(最終行))を一つずつ繰り返し処理 変数folderpathを「path(プログラム3) \\ rangesの0番目要素」とする もし、変数folderpathと同一フォルダが存在していないならば 変数folderpathのパスでフォルダを作成 同一フォルダが存在していれば リストexistedfolder(プログラム4)にrangesの0番目要素を追加 |
注意点としては、プログラム2行目でフォルダパスを扱うとき、「\」を2つ重ねる必要があります。
プログラム6|既に存在するフォルダが1つ以上あれば、メッセージ表示
1 2 3 |
#プログラム6|既に存在するフォルダが1つ以上あれば、メッセージ表示 if len(existedfolder) > 0: messagebox.showinfo('存在するフォルダがあります', '以下のフォルダは既に存在しています。\n\n'+'\n'.join(existedfolder)) |
1 2 3 |
#解説 もしexistedfolderの要素が0より大きいならば(同一フォルダが一つ以上あれば) メッセージを表示する |
1行目のif文では、len(existedfolder)で要素数を調べています。
なぜならexistedfolderの要素数は、同一フォルダ数と一致するからです。
そのため、len(existedfolder)とすることで要素数を調べ、それが0より大きければ、エラーメッセージを表示するようにします。
2行目の「messagebox.showinfo(title, message)」にはtitleとmessageの2つの要素があります。
titleは、メッセージ表示の件名(この事例では「存在するフォルダがあります」)
messaageは、メッセージ表示の内容(この事例では、「以下のフォルダは既に存在しています。\n\n’+’\n’.join(existedfolder)」)
プログラムの解説はここまでです。
Pythonについて詳しく理解したいなら
Pythonを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にPythonを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
Pythonの難易度などについては、以下で紹介しています。
勉強の参考になれば幸いです。