Pythonを使うと、フォルダ内のファイル数を調べることができます。
ここではPython×フォルダの事例として、とあるフォルダ内に存在するファイルをカウントして、テキストファイルに出力するプログラムを作っていきます。
なお、フォルダ内の含まれるサブフォルダ内に存在するファイル数もカウントしていきます。
・ファイル数をテキストに出力
それでは以下で詳しく紹介していきます。
目次
Pythonでフォルダ内のファイル数をカウントしてテキストに出力
今回は以下の作業をpythonで行います。
1. とあるフォルダに存在するファイル数をカウントする
2. フォルダ内の存在するサブフォルダ内のファイル数もカウントする
3. テキストに出力する
上記のプログラムを作っていきます。
Pythonプログラムの実行前準備|ライブラリインストール
1. 必要なライブラリをインストール
準備1|必要なライブラリをインストール
今回は以下の2つのライブラリをインストールします。
pip install pathlib
フォルダ内のファイルやフォルダを取得するためのライブラリです。
上記をインストールしておかないと動かないので、注意が必要です。
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 35 36 |
# プログラム1|ライブラリ設定 import pathlib import os # プログラム2|mainプロシージャ def main(): Folderpath = r'D:\DropBox\Dropbox\Python\Program\700_Folder' outputpath = 'FolderCounter.txt' f = open(outputpath, mode='w') GetFolderFileNames(Folderpath, 0, f) # プログラム3|フォルダや取得する関数 def GetFolderFileNames(path, kaiso, f): files = pathlib.Path(path).glob('*') counter = 0 Folderlist = [] # プログラム4|フォルダ内のフォルダやファイルをチェックする for file in files: if file.is_file() == True: counter += 1 else: Folderlist.append(file) # プログラム5|テキストに書き出す foldername = os.path.basename(path) output = '\t' * kaiso + foldername + '(' + str(counter) + ')\n' f.write(output) # プログラム6|フォルダ内のサブフォルダを処理する for Folder in Folderlist: GetFolderFileNames(Folder, kaiso+1, f) # プログラム7|mainを呼び出す if __name__ == "__main__": main() |
以下で詳しく説明しています。
プログラム1|ライブラリ設定
1 2 3 |
# プログラム1|ライブラリ設定 import pathlib import os |
pathlibはフォルダ内の全ファイルを取得するときに使用します。
osはファイル名と拡張子を取得するときに使用します。
プログラム2|mainプロシージャ
1 2 3 4 5 6 |
# プログラム2|mainプロシージャ def main(): Folderpath = r'D:\DropBox\Dropbox\Python\Program\700_Folder' outputpath = 'FolderCounter.txt' f = open(outputpath, mode='w') GetFolderFileNames(Folderpath, 0, f) |
以下で一行ずつプログラムを解説します
プログラム解説
2 |
def main(): |
プログラム名としてmain()とする。
「()」として、引数は設定しない。
3 |
Folderpath = r'D:\DropBox\Dropbox\Python\Program\700_Folder' |
Folderpathに対象フォルダのパスを取得する。
ここはご自身の調査したいフォルダパスを入れます。
「\」エスケープ回避するために、rを先頭に付けて「r’フォルダパス’」とします。
4 |
outputpath = 'FolderCounter.txt' |
outputpathを「FolderCounter.txt」というファイル名を設定する。
5 |
f = open(outputpath, mode='w') |
outputpathで指定したテキストファイルを「w」モード(書き込み)で開きます。
6 |
GetFolderFileNames(Folderpath, 0, f) |
プログラム3~プログラム6を呼び出します。
プログラム3|フォルダや取得する関数
1 2 3 4 5 |
# プログラム3|フォルダや取得する関数 def GetFolderFileNames(path, kaiso, f): files = pathlib.Path(path).glob('*') counter = 0 Folderlist = [] |
プログラム解説
以下で一行ずつプログラムを解説します
2 |
def GetFolderFileNames(path, kaiso, f): |
GetFolderFileNames(path, kaiso, f)という関数とする。
3 |
files = pathlib.Path(path).glob('*') |
「path」で指定したフォルダ内のファイルやフォルダを全て取得する。
4 |
counter = 0 |
変数counterを0とする。
このcounterでファイル数をカウントする。
5 |
Folderlist = [] |
Folderlistというリストを設定する。
このFolderlistにフォルダ内のフォルダのみを取得する。
プログラム4|フォルダ内のフォルダやファイルをチェックする
1 2 3 4 5 6 |
# プログラム4|フォルダ内のフォルダやファイルをチェックする for file in files: if file.is_file() == True: counter += 1 else: Folderlist.append(file) |
プログラム解説
以下で一行ずつプログラムを解説します
2 |
for file in files: |
フォルダ内のファイルを一つずつ処理する。
フォルダ内のファイルだけではなく、フォルダ内に存在するフォルダも処理を行う
3 |
if file.is_file() == True: |
もし対象がファイルがTrueだったら、次の処理を実行する。
仮に対象がフォルダだったら、Falseになるため、次の処理は実行されない。
4 |
counter += 1 |
counter(プログラム2)に1を加算します。
このcounterでフォルダ内のファイル数をカウントします。
なお「counter=counter+1」と表記しても同じように加算することができます。
5 |
else: |
この場合、elseは「fileがフォルダであれば」と同義になります。
6 |
Folderlist.append(file) |
プログラム2で設定したFolderlistに対象フォルダを格納します。
このFolderlistはプログラム6で使用します。
プログラム5|テキストに書き出す
1 2 3 4 5 |
# プログラム5|テキストに書き出す foldername = os.path.basename(path) output = '\t' * kaiso + foldername + '(' + str(counter) + ')\n' print(output) f.write(output) |
プログラム解説
以下で一行ずつプログラムを解説します
2 |
foldername = os.path.basename(path) |
「os.path.basename(path)」を使うと、pathのファイル名を取得します。
「os.path.basename(path)」と「path」は以下のような違いがあります。
1 2 3 |
foldername = os.path.basename(path) print(foldername) print(path) |
実行結果
1 |
>>>D:\DropBox\Dropbox\Python\Program\700_Folder\701_CreateFolders |
>>>701_CreateFolders
os.path.basename(path)とすることで、対象のフォルダ名のみを取得することが可能です。
3 |
output = '\t' * kaiso + foldername + '(' + str(counter) + ')\n' |
変数outputを「(tabスペース)× kaiso(階層分) + foldername + (counter)」とする
「\t」はtabスペースを指します。このtabスペースをkaiso(フォルダ階層分)を掛け算することで、テキストファイルを見たときに階層構造が分かるようにします。
「foldername」はフォルダ名を取得します。
「counter」はフォルダ内のファイル件数です。
「\n」は改行を指します。最後に入れることで、テキストファイルに書き出したときに改行を挿し込むことができます。
このoutputを以下のプログラムで書き出します。
4 |
f.write(output) |
テキストファイルにoutputを書き込みます。
プログラム6|フォルダ内のサブフォルダを処理する
1 2 3 |
# プログラム6|フォルダ内のサブフォルダを処理する for Folder in Folderlist: GetFolderFileNames(Folder, kaiso+1, f) |
プログラム4で取得したFolderlistを使用します。
フォルダ内の存在するフォルダに対して、プログラム3~プログラム6を呼び出して、下位フォルダに含まれるフォルダやファイルの件数を確認します。
このとき、「kaiso+1」とすることで、テキストファイルに書き出されたとき、1tabスペース分のインデントをずらすことができます。
このように再帰的に呼び出すことで、全てのフォルダとファイルを調査していきます。
プログラム7|mainを呼び出す
1 2 3 |
# プログラム7|mainを呼び出す if __name__ == "__main__": main() |
main()を呼び出します。
プログラムの解説はここまでです。
Pythonについて詳しく理解したいなら
Pythonを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にPythonを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
Python×効率化のサンプル
Pythonで効率化できる事例をサンプルコード付きで紹介しています。
Python×Excel
PythonとExcelで自動化できることを紹介しています。
事例も数多く紹介しているので、ぜひ参考にしてみてください。
Python×PDF
PythonとPDFで自動化できることを紹介しています。
Pythonって難しい?
Pythonの難易度などについては、以下で紹介しています。
勉強の参考になれば幸いです。