Pythonのメモ帳

numpy, pandas, tensorflow を使いこなすための忘備録

ダイアログボックスでファイル名を指定したい(Windows/Macでコードが違う)

データを取り込む時にはファイル名を指定する。
pd.read_csv()でも np.loadtxt()でもそう。

でファイル名を指定するのにコードをいちいち書き換えたくないので、
ダイアログボックスを使う方法を調べた。

調べたらtkinterというライブラリを使うみたいだが、これがPython2系とPython3系でコードが色々と違うみたい。Python3系向けにここでメモ。

OSが違うとコードの書き方が変わるので注意。

 

windowsの場合

import tkinter as tk
import tkinter.filedialog as tkdialog
import os

root  = tk.Tk()
fname = tkdialog.askopenfilename(filetypes=[('data files','*.csv;*.txt')],initialdir=os.getcwd())
root.withdraw()

引数filetypesでダイアログボックスに表示される拡張子を制限指定できる。ここではcsv,txtに絞ってるけど、すべて表示したければ,

filetypes=[('all files','*.*')]

とすればOK。

 

Macの場合

macOSwindowsではfiletypesの書き方が違うようで、上のコードではファイルが指定できなかった。こう書けば大丈夫だった。

root  = tk.Tk()
fname = tkdialog.askopenfilename(filetypes=[("csv files","*.csv"),("txt files","*.txt")],initialdir=os.getcwd())
root.withdraw()

ただ、windowsの時のように全てのファイルが選択できるようにする方法はわかりません。

 

 

最後に、どちらの場合も一緒にimportしているosは現在のディレクトリを取得するのに使っているだけなので不要なら引数の部分と一緒に削除してOK。