Pythonで読み込むファイルを入力・選択する方法

2020-03-12

データファイルや画像ファイルなど,Python 上で処理したいファイルを入力・選択する方法はいくつかあります.

環境

  • MacBook Air (13-inch, 2017)
  • macOS Catalina (10.15.3)
  • Python 3.7.6

標準入力を使う

最もオーソドックスなのは,標準入力でファイル名をキーボードで打ち込む方法です.

file_name = input('Input a file name: ')

一番簡単ですが,ファイル名をいちいち覚えておかないといけないので,ちょっとめんどくさいです.

ターミナル上で選択できるようにする

Caution

macOS High Sierra (10.13) では動いていましたが,macOS Catalina (10.15) にしたら動かなくなりました.

パッケージをインストールしたりプロジェクトを作成したりするとき,初期設定をターミナル上で選択するのと同じような機能を実装できます.

ファイルの選択肢を表示し,矢印キーと Enter でどのファイルを選択するかを決めることができます.

Caution

個人開発のパッケージっぽいです.

terminal

$ pip install pick
import os
from pick import pick

dir = './data'
file_name, index = pick(sorted(os.listdir(dir)), 'Select a data file')

data ディレクトリ下にあるファイルが候補として表示されます.

GUI で選択する

Windows であればエクスプローラ,macOS であれば Finder を使用して選択します.

from tkinter import filedialog

type = (('テキストファイル','*.txt'))
dir = './data'
file_name = filedialog.askopenfilename(filetypes=type, initialdir=dir)

type で読み込むファイルの形式を指定することができます.

形式に関わらずすべて表示する場合は ('', '_._') と指定します.

(追記)

Tk という名のウィンドウが自動生成されますが,上記の方法だとウィンドウを表示したままになるので,それを避けたい場合は下のように書くこともできます.

from tkinter import filedialog
from tkinter import *

type = (('テキストファイル','*.txt'))
dir = './data'
root = Tk()
# hide window
root.withdraw()
root.filename = filedialog.askopenfilename(filetypes=type, initialdir=dir)