Translate

【MATLAB】pythonでMATLABのuigetfile見たいにGUIっぽくファイルを選択する方法【python】

こんにちは。
プログラミングを用いてデータを解析する場合には、データのファイルパス名を手入力したりすることがあると思いますが、その際には、スペルミスだったりでエラーを吐いてしまい、うまく解析が進まないことがあります。

よくある市販のソフトウェアを使用する場合には、直接コードにファイルパスを入力することはなく、ポップアップされてきたウィンドウからマウスでファイルを選択してファイルパスを取得して解析を走らせることができます。

実はこういったマウスで直観的にファイルを選択して解析を走らせる方法があります。MATLABだと、uigetfileというツールボックスがあり、これを利用することで簡単に先述の機能を実装することが可能です。

しかしながら、pythonにはMATLABのuigetfileみたいな一行で解決できるようなツールボックスはありませんので、自分で関数を作成する必要があります。今回はpythonの標準ライブラリに搭載されているtkinterを使って、MATLABでいうuigetfileのようなモジュールを作成していましょう。

設計としてはマウスでファイルを選択してそのファイルパスを取得する処理を行う。



pythonでuigetfileのような処理を行うためには、見出しタイトルの通り、最終的にはファイルパスを戻り値として出力するといった処理になります。実際にその処理を行う関数がこちらになります。

#必要なパッケージのインポート
import tkinter, tkinter.filedialog, tkinter.messagebox
def get_data_only_path(dir_name,typ):
    #ファイルパスの取得をGUIで行う関数
    # dir_name:対象となるディレクトリ名(dataが保存されているディレクトリ名) 
    # typ = 対象のファイルの拡張子
    idir = dir_name
    root = tkinter.Tk()    
    file_path = tkinter.filedialog.askopenfilename(initialdir = idir,filetypes =  [('テキストファイル',typ)] )
    #delete root window
    root.withdraw()
    return file_path
#実際にはこんな感じで使う
file = get_data_only_path('raw_data','csv')


こんな感じで処理の行数自体はそんなに多くもないし、さらに特別なパッケージもそこまで必要ありません。これをモジュールのインポート直後に書いてやるとそれ以降の行でこのコードを使うことができます。

今回の関数は引数は二つ必要になります。一つ目の引数はこの関数が含まれている.pyファイルがある同じディレクトリにあるフォルダ名を文字列データで入力します。

二つ目の引数としては、マウスで選択してファイルパスを取得したいファイルの拡張子名を入力します。そうすることで、一つ目の引数で選択したファイルの中にあるファイルの中から、選択した拡張子のファイルだけが出現するようになります。

関数の行の次に書いた実際の運用例ではどういったことを指しているかというと、この関数がある同じディレクトリ内にあるraw_dataという名前のフォルダを選択して、そのフォルダ内にあるcsvファイルがポップアップの中に出現して、そのファイルを選択することでそのファイルのある絶対パスがfileの変数に格納されるという感じの処理になります。

ループ処理の必要のない単発のファイルの解析処理であれば、むしろこういったGUI(グラフィックインターフェース)の方が、プログラミングというか解析そのものに慣れていないビギナーの人には馴染みやすいかもしれません。時と場合に応じて使い分けていくのがよいでしょう。