Pythonでファイルパスを入力するのは非常にめんどうだと感じませんか?
tkinterを使うことで,マウスでファイルを選択するだけでファイルパスを読み込むことができます
本記事では,GUI形式でエクスプローラから複数のファイルを選択してファイルパスを取得する方法について解説します
目次
tkinter.filedialogの全関数解説
GUI形式でファイル関係の操作をする場合,tkinter.filedialogを使用します
tkinter.filedialog
- 引数
-
- parent : ダイアログを表示するためのウィンドウ
- title : ウィンドウのタイトル
- initialdir : ダイアログを開始するディレクトリ
- initialfile : ダイアログを開いたときに選択されているファイル
- filetypes : 選択可能ファイルタイプ.ex) txt, csv, * (ワイルドカード)
- defaultextension : ファイルに追加するデフォルトの拡張子 (SaveAsダイアログ)
- multiple : trueの場合,複数項目の選択を許可
- 関数
-
- tkinter.filedialog.askopenfile : 1つのファイルオブジェクトを取得(Openダイアログ)
- tkinter.filedialog.askopenfiles : 複数のファイルオブジェクトを取得(Openダイアログ)
- tkinter.filedialog.asksaveasfile : 1つのファイルオブジェクトを取得(SaveAsダイアログ)
- tkinter.filedialog.askopenfilename : 1つのファイルパスを取得(Openダイアログ)
- tkinter.filedialog.askopenfilenames : 複数のファイルパスを取得(Openダイアログ)
- tkinter.filedialog.asksaveasfilename : 1つのファイルパスを取得(SaveAsダイアログ)
- tkinter.filedialog.askdirectory : 1つのフォルダパスを取得
- 公式ドキュメント
askopenfilenameで1つのファイルパスを取得する (title, initialdir)
askopenfilenameは選択したファイルパスを文字列で取得できます
ただし,ファイルは1つしか選択できません
また,引数にtitle(ウィンドウのタイトル),initialdir(開始ディレクトリ)を指定しました
path = filedialog.askopenfilename(title='Useful-Python', initialdir='C:/Users/Documents/')
print(path)
# C:/Users/Documents/230430_person_info_west.csv

askopenfilenamesで複数のファイルパスを取得する (initialfile, filetypes)
askopenfilenamesは選択したファイルパスを文字列の配列(タプル)で取得できます
また,引数にinitialfile(初期選択ファイル)とfiletypes(選択可能ファイルタイプ)を指定しました
path = filedialog.askopenfilenames(
initialfile='230430_person_info_west.csv',
filetypes=[('CSVファイル', '*.csv')]
)
print(path)
# ('C:/Users/Documents/230430_person_info_west.csv',)

askdirectoryで1つのフォルダパスを取得
askdirectoryは選択したフォルダパスを文字列で取得できます
path = filedialog.askdirectory()
print(path)
# C:/Users/Documents

使いまわせるように関数にする
ファイルパスを取得する機能はあらゆる場面で使うので,呼び出すだけで使えるように関数にしてみましょう
複数のファイルパスを取得する関数
askopenfilenamesで複数のファイルパスを取得する機能を関数にしたのが,下記コードです
関数名はread_filepathesです
def read_filepathes() -> tuple:
typ = [('CSV,テキストファイル', '*.csv; *.txt')]
dir = r'C:'
return filedialog.askopenfilenames(filetypes=typ, initialdir=dir)
関数の実行
read_filepathes()で関数が実行され,returnで指定した返値がpathesに代入されます
これがまさにファイルパスの配列です
pathes = read_filepathes()
print(pathes)
# ('C:/Users/Documents/230430_person_info_west.csv',)

参考文献
Tkinter Dialogsの公式ドキュメント
コメント