【python】複数ファイル処理選択、ファイル名、フォルダパス取得
複数ファイルを選択し処理する
仕事の効率化を行う上でよくする処理として、複数ファイルを選択して1ファイルずつ処理をするということがよくある。
今回は、単一ファイル選択時の処理、複数ファイル選択時の処理を行う処理を関数にしてみたので、参考でどんどん真似して効率化に活用してくれると幸いです。
ソースコード
import os import tkinter # tkinterをインポート from tkinter import filedialog # tkinterのfiledialogをインポート # 単一ファイル選択 def file_select(): root = tkinter.Tk() # tkinterのインスタンスを生成 root.withdraw() # ファイル選択ダイアログでのファイル検索種類を指定 file_type = [('Excelファイル', '*.xls;*.xlsx;*.xlsm;'), ('wordファイル', '*.doc;*.docx;*.docm;'), ('textファイル', '*.txt')] # file_type = [('Excelファイル', '*.xls;*.xlsx;*.xlsm;')] # 例 # file_type = [('DXF(図面ファイル)', '*.dxf')] # 例 # initialdir:ダイアログが開くディレクトリを指定 # filename = tkFileDialog.askopenfilename(filetypes=file_type, initialdir='C:/foldername') # 単一ファイル選択時 filename = filedialog.askopenfilenames(filetypes=file_type) return filename # 選択ファイルの絶対パスを返します。 # 複数ファイル選択 def files_select(): root = tkinter.Tk() # インスタンス生成 root.withdraw() # ファイル選択ダイアログでのファイル検索種類を指定 file_type = [('Excelファイル', '*.xls;*.xlsx;*.xlsm;'), ('wordファイル', '*.doc;*.docx;*.docm;'), ('textファイル', '*.txt')] # file_type = [('Excelファイル', '*.xls;*.xlsx;*.xlsm;')] # 例 # file_type = [('DXF(図面ファイル)', '*.dxf')] # 例 # initialdir:ダイアログが開くディレクトリを指定 # filename = tkFileDialog.askopenfilename(filetypes=file_type, initialdir='C:/foldername') # 単一ファイル選択時 filenames = filedialog.askopenfilenames(filetypes=file_type) return filenames # 選択ファイルの絶対パスを返します。 # メイン処理関数 def hoge_logic(_path, _base_name, _dir_name): # 処理内容~~ # ~~~~~~~~~ # ~~~~~~~~~ print('ファイルPath: ' + _path) print('フォルダ名dir_name: ' + _dir_name) print('ファイル名base_name: ' + _base_name) # main if __name__ == "__main__": # 単一ファイル選択処理の場合------ # filename = file_select() # base_name = os.path.splitext(os.path.basename(filename))[0] # ファイル名を取得 # dir_name = os.path.dirname(filename) # フォルダ名を取得 # # # メイン処理関数呼び出し # hoge_logic(filename, base_name, dir_name) # ------------------- # 複数ファイル選択処理の場合------ filenames = files_select() # 複数ファイルを1ファイルずつ処理する for path in list(filenames): base_name = os.path.splitext(os.path.basename(path))[0] # ファイル名を取得 dir_name = os.path.dirname(path) # フォルダ名を取得 # メイン処理関数呼び出し hoge_logic(path, base_name, dir_name) # ---------------------- print('処理終了')
処理内容
このpythonファイルを実行すると、最初にファイル選択ダイアログ画面が表示されるので、
処理対象のファイルを選択します。
コンソール画面に選択されたファイル数分の下記の情報を取得するフローとなります。
・ファイル絶対パス
・フォルダ名
・ファイル名
# 出力結果 ファイルPath: C:/sample/test1.xlsx フォルダ名dir_name: C:/sample ファイル名base_name: test1 ファイルPath: C:/sample/test2.xlsx フォルダ名dir_name: C:/sample ファイル名base_name: test2 ファイルPath: C:/sample/test3.xlsx フォルダ名dir_name: C:/sample ファイル名base_name: test3 ファイルPath: C:/sample/test4.xlsx フォルダ名dir_name: C:/sample ファイル名base_name: test4 ファイルPath: C:/sample/test5.xlsx フォルダ名dir_name: C:/sample ファイル名base_name: test5 処理終了
あとは、ファイル毎に処理をする内容に書き換えてあげれば、活用できると思います。
おまけ
ファイル種類をプルダウンから選択できる。
サンプルコード
# ファイル選択ダイアログでのファイル検索種類を指定 file_type = [('Excelファイル', '*.xls;*.xlsx;*.xlsm;'), ('wordファイル', '*.doc;*.docx;*.docm;'), ('textファイル', '*.txt')]
下の画像のようにプルダウン選択できる。