Pythonを使うとテキストファイルのデータをもとに、フォルダを作成することができます。
実は一工夫することで、フォルダを階層ごとに作成することも可能です。
今回は、テキストファイルの階層に合わせて、フォルダを階層ごとに作成するプログラムを紹介します。
・フォルダを階層ごとに作成する
なおPython×フォルダの事例は以下で紹介していきます。
それでは以下で詳しく紹介していきます。
テキストファイルのデータをもとにフォルダを自動作成するプログラムの概要
今回は以下の作業をpythonで行うことを目指します。
1.フォルダ内のフォルダやファイルを取得する
2.取得対象がフォルダの場合、その下位のフォルダやファイルを取得する
3.取得したフォルダやファイルの名前をテキストに書き込む
詳しいプログラム解説は後半で行います。
Pythonプログラムを実行するための準備
事前の準備として、作成したいフォルダをテキストファイルに記載しておきます。
準備|テキストファイルを作成
今回は上記のようなテキストファイルを作成しました。
作成するテキストファイルには以下の注意点があります。
・作成したいフォルダの階層を分けるときは「TAB」でインデントを作る
・何も書いていない行を作らない
ここで作成したテキストファイルの情報をもとにフォルダを作成していきます。
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 30 31 32 33 34 |
#プログラム1|ライブラリの設定 import os #プログラム2|フォルダパスの取得 path = 'CreateFolders.txt' fullpath = os.getcwd() #プログラム3|ファイル格納リスト folderlist = [] #プログラム4|テキストファイル内のデータをリストへ格納 with open(path, encoding='shift-jis') as lines: for line in lines: line = line.replace('\n','') folderlist.append(line.split('\t')) #プログラム5|作成したいフォルダを1つずつ編集 for i, folders in enumerate(folderlist): list = [] #プログラム6|データがなければ、一つ前のパスを入れる for j, folder in enumerate(folders): if folder != '': list.append(folderlist[i][j]) else: list.append(folderlist[i-1][j]) folderlist[i] = list #プログラム7|folderpathにフルパスを作る folderpath = fullpath +'\\' + '\\'.join(folderlist[i]) # プログラム8|同じ名前のフォルダが存在しなければ、フォルダを作成 if os.path.exists(folderpath) == False: os.makedirs(folderpath) |
以下で詳しく説明しています。
プログラム1|ライブラリの設定
1 2 |
#プログラム1|ライブラリの設定 import os |
osのライブラリを使用します。
これで、Pythonファイルが保存されているフォルダを取得することができます。
プログラム2|フォルダパスの取得
1 2 3 |
#プログラム2|フォルダパスの取得 path = 'CreateFolders.txt' fullpath = os.getcwd() |
1 2 3 |
#プログラム解説 変数pathを「CreateFolders.txt」とする 変数fullpathを現在のディレクトリを指定する |
Pythonファイルと同じフォルダの「CreateFolders.txt」というテキストファイルを指定します。
今回は「CreateFolders.txt」の中身は以下のようにしています。
またプログラム後半で使用する「fullpath」に現在のディレクトリ(Pythonファイルが保存されているフォルダ)を取得します。
プログラム3|ファイル格納リスト
1 2 |
#プログラム3|ファイル格納リスト folderlist = [] |
1 2 |
# プログラム解説 変数folderlistという空リストを作成 |
この空リストにフォルダパス作成のための情報を格納していきます。
プログラム4|フォルダやファイルを一つずつ書き出す
1 2 3 4 5 |
#プログラム4|テキストファイル内のデータをリストへ格納 with open(path, encoding='shift-jis') as lines: for line in lines: line = line.replace('\n','') folderlist.append(line.split('\t')) |
1 2 3 4 5 |
#プログラム解説 プログラム2で指定したテキストファイルを読み込む(shift-jisでencoding) テキストファイルを一行ずつ読み込む 変数lineの「\n(改行)」を削除する リストfolderlistに、変数lineを「\t(タブスペース)」で区切って格納 |
ちなみにこの時点で、以下のprintで表示してみると画像のようになります。
階層ごとにリストに格納できていることが分かります。
しかし、「”」の箇所がありますので、ここに各階層のフォルダ名を入れていく必要があります。
この作業を以降でやっていきます。
プログラム5|作成したいフォルダを1つずつ編集
1 2 3 |
#プログラム5|作成したいフォルダを1つずつ編集 for i, folders in enumerate(folderlist): list = [] |
1 2 3 |
#プログラム解説 folderlistに含まれるリストで繰り返し処理を行う(iは要素番号、foldersはリスト内の要素) 変数listを空リストで設定 |
プログラム6|データがなければ、一つ前のパスを入れる
1 2 3 4 5 6 7 |
#プログラム6|データがなければ、一つ前のパスを入れる for j, folder in enumerate(folders): if folder != '': list.append(folderlist[i][j]) else: list.append(folderlist[i-1][j]) folderlist[i] = list |
1 2 3 4 5 6 7 |
#プログラム解説 foldersに含まれるリストで繰り返し処理を行う(jは要素番号、folderはリスト内の要素) もしfolderが空ではないなら listにfolderlist[i][j]を追加 それ以外の場合(folderが空のとき) listにfolderlist[i-1][j]を追加 folderlistのi番目の要素をlistに置き換える |
ちなみにこの時点で、以下のprintで表示してみると画像のようになります。
(正確にはこの時点で以下のprintをすると以下の結果になりませんが、説明を分かりやすくするために敢えてこのようにしています)
階層ごとにリストに格納できていることが分かります。
「”」は、各階層のフォルダ名が記載されていることが分かります。
以降のプログラムで、リストの各行を「\\」でつなげてフォルダパスを作成します。
プログラム7|folderpathにフルパスを作る
1 2 |
#プログラム7|folderpathにフルパスを作る folderpath = fullpath +'\\' + '\\'.join(folderlist[i]) |
1 2 |
#プログラム解説 変数folderpathにfullpath(プログラム2) +'\\' + folderlistのi行目要素を「\\」でつないだ文字列 |
ちなみにこの時点で、以下のprintで表示してみると画像のようになります。
(正確にはこの時点で以下のprintをすると以下の結果になりませんが、説明を分かりやすくするために敢えてこのようにしています)
これでフォルダを作成するためのパスが完成しました。
このパスをもとにプログラム8でフォルダを作成します。
プログラム8|同じ名前のフォルダが存在しなければ、フォルダを作成
1 2 3 |
# プログラム8|同じ名前のフォルダが存在しなければ、フォルダを作成 if os.path.exists(folderpath) == False: os.makedirs(folderpath) |
1 2 3 |
# プログラム解説 もしfolerpathと同じ名前のフォルダが存在していなければ folderpathという名前でフォルダを作成 |
上記のようにフォルダが作成されていることが確認できました。
プログラムの解説はここまでです。
Pythonについて詳しく理解したいなら
Pythonを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にPythonを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
Pythonの難易度などについては、以下で紹介しています。
勉強の参考になれば幸いです。