使用 tkFileDialog 取得多個檔案名稱有個惱人的小問題,即 tkFileDialog 並不會回傳 python list,而是傳回多個檔名串成的字串。當檔名不包含空白的時候,這個字串會以空白分隔各個檔名;否則各檔名會包含於 {} 當中。


filenames = tkFileDialog.askopenfilename(...)
    
# Example result:
#  D:/file1.txt D:/file2.txt D:/file3.txt
#  {C:/My Document/file1.txt} {D:/My Precious/file2.txt}

網路上很多範例都是直接用 split 之類的分解 tkFileDialog 回傳值,這個作法的問題在於,空白和 {} 都是合法的檔名字元,split (或其他無狀態的分割函數)不可能正確拆解。雖然我知道這樣問題很多,但通常我寫 Python 的時候都只是臨時需要某個功能而已,所以沒想太多就直接照著做。

昨天在寫 python 時,感覺這麼常見的鳥問題,不太可能沒有簡單手段,於是多花了點時間搜尋。結果發現自己果真當了好一陣子的呆瓜,其實 Tkinter 有提供這類串列的分解法。


root = Tkinter.Tk()

...

filenames = tkFileDialog.askopenfilename(...)
filelist = root.tk.splitlist(filenames)

filelist 即為分解過的 Python list。以上供和我一樣忙碌的過路人參考。

novus 發表在 痞客邦 PIXNET 留言(0) 人氣()