Pythonで自動化プログラムを作ろうとした時、ファイルの選択を手動でやっていたら本末転倒です。ここでは指定したフォルダのファイル名リストや拡張子リストといった情報を自動で取得する方法を紹介します。
こんにちは。wat(@watlablog)です。
プログラムは自動化してなんぼ!ここでは基本的なディレクトリ情報として、フォルダ内のファイルリスト一覧を取得する方法を紹介します!
ファイル情報をリストで取得すると様々なメリットがある
メリット1:自動でファイル読み込みができる
プログラムを覚え始めた時は、あるファイルへのパスを自分でプログラムコード内に入力しておき、プログラムを実行して読み込んだファイルに対して結果を得るというやり方がほとんどだったと思います。
しかしプログラムの神髄は自動化することにあります。いちいちソースコードの中身のファイル名を変更して実行を手動で繰り返すことはナンセンスと言えます。
そんな時、ファイル名を自動で取得できる方法を習得しておけば、わざわざ手入力する必要はなくなりますね。
まずは本方法で読み込み用ファイルパスの入力のムダを省きましょう!
メリット2:ファイル保存時に元ファイル名を引き継げる
当ブログでも基本的な画像処理、信号処理でファイルを扱うことはありましたが、例えば入力ファイル名が「sample.jpg」だとしても、処理後のファイルは「out.jpg」とかの場合がほとんどでした。
しかし、ファイル名や拡張子といった情報を自動で取得してバックデータとして持っておけば、処理後のファイルに「sample_out.jpg」といった元ファイルの名前を引き継いだファイル名にすることは容易です。
これはユーザが処理後のファイルを識別しやすくなるので、ソフトウェアのユーザビリティ向上にも繋がります。
本方法を処理後のファイル名自動割り付けに活用しましょう!
メリット3:ファイル名や種類による場合分けが容易になる
プログラムで自動化を考えた時、困ってしまうのがイレギュラーファイルの存在です。
画像処理をしたいのにテキストファイルが紛れていた、ということは良くあると思います。筆者も何か忘れてはいけないメモをテキストファイルとして大量のファイルと同じディレクトリに入れておくということはよくやります。
メモを置いておくことはよくやるよね?
何もエラー処理をしていないとそれだけでプログラムは停止してしまうことにもなりかねませんが、ファイル名や拡張子といった情報を全てのファイルで取得しておけば、if文によるエラー処理も容易になります。
本方法をスマートなエラー処理に活用しましょう!
Pythonによるファイル一覧取得関数
コード説明
ここではPythonの基本関数を組み合わせて、後で自動化として利用する時に使いやすい(…と筆者が勝手に思っている)関数を作りましたので、その関数を紹介します。
以下のコードはプログラム実行ファイルと同じフォルダに、「dir」というフォルダを作り、そのdirフォルダの中にあるファイルを全てリストするものです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import glob import os def filesearch(dir): path_list = glob.glob(dir + '\*') # 指定されたディレクトリ内の全てのファイルを取得 name_list = [] # ファイル名の空リストを定義 ext_list = [] # 拡張子の空リストを定義 out_list = [] # 保存パスの空リストを定義 # ファイルのフルパスからファイル名と拡張子を抽出 for i in path_list: file = os.path.basename(i) # 拡張子ありファイル名を取得 name, ext = os.path.splitext(file) # 拡張子なしファイル名と拡張子を取得 name_list.append(name) # 拡張子なしファイル名をリスト化 ext_list.append(ext) # 拡張子をリスト化 out_list.append(os.path.join(*[dir, name + '_resize' + ext])) # 保存パスを作成 return path_list, name_list, ext_list, out_list # ファイル情報を取得する関数を実行 path_list, name_list, ext_list, out_list = filesearch('dir') print(path_list) print(name_list) print(ext_list) print(out_list) |
実行結果
以下が実行結果です。ここでは5つのファイルをdirフォルダに入れています。
①はこれから読み込むファイルのパスとして、②は拡張子をとっているのでその後にデータラベルに使ったり、③は条件分岐の判断材料に使うための拡張子、④は処理後のファイルを別名で保存する時に、何のファイルを参照したかがわかりやすいように…と想定しています。
1 2 3 4 5 6 7 8 9 10 11 |
# ①ファイル読み込みに使うフルパス ['dir\\sample_01.JPG', 'dir\\sample_02.JPG', 'dir\\sample_03.JPG', 'dir\\sample_04.JPG', 'dir\\sample_05.JPG'] # ②拡張子なしファイル名 ['sample_01', 'sample_02', 'sample_03', 'sample_04', 'sample_05'] # ③拡張子 ['.JPG', '.JPG', '.JPG', '.JPG', '.JPG'] # ④保存用フルパス ['dir\\sample_01_out.JPG', 'dir\\sample_02_out.JPG', 'dir\\sample_03_out.JPG', 'dir\\sample_04_out.JPG', 'dir\\sample_05_out.JPG'] |
まとめ
ファイル名を自動で取得し、リスト化することは自動化のために様々なメリットがあります。
ファイル読み込み、保存時の名前に元ファイル名を引き継ぐ、拡張子でプログラムに条件分岐をさせるといった目的で利用することができます。
これを基本として様々な自動化プログラムに挑戦しよう!自動化をする時はロジックに気を付けなきゃね!
Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!
コメント