【Python】GUI形式でファイルパスやフォルダパスを取得する (tkinter.filedialog)

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(開始ディレクトリ)を指定しました

複数形のsでファイル選択が単数か複数か変わるため注意してください

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(選択可能ファイルタイプ)を指定しました

filetypesを複数にする場合は,セミコロンで区切ってください ex) *png; *jpg; *jpeg

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の公式ドキュメント

シェアしてくださると嬉しいです!
  • URLをコピーしました!

コメント

コメントする

目次