【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')]
下の画像のようにプルダウン選択できる。