2017-09-19 77 views
0

我正在使用python和我的魔杖運行一個程序,將打開用戶指定的文件。但問題是,如果用戶沒有指定確切的文件名,那麼它會給出錯誤。如果用戶想要打開「99999-file-name.mp3」 並且他已經鍵入「filename.mp3」,那麼程序如何打開最接近指定文件的文件?如何打開最接近指定文件的文件python

+1

你如何定義「最接近」?有很多可以解釋的方法。你的例子認爲一個名字完全包含給定的名字。怎麼樣與錯別字的名字? – GPhilo

+1

這似乎是一個糟糕的X-Y解決方法,爲什麼不確保用戶總是輸入正確的文件或可以匹配的特定模式? –

回答

2

要回答這個問題,您需要先定義「最接近」,因爲在計算時這可能意味着非常不同的事情。如果你想比較字符串並找到最相似的,那麼一個好辦法就是檢查編輯距離。這裏有Python庫,即https://pypi.python.org/pypi/editdistance
你給它兩個字符串,它告訴你你必須改變一個字符串來獲得另一個字符串。根據文件:

>>> import editdistance 
>>> editdistance.eval('banana', 'bahama') 
2L 

PS。不能不提,我認爲這是一個壞主意。如果您想打開打開的文件並且程序開始打開隨機文件,那麼要麼您最終要覆蓋一個不會被覆蓋的文件,要麼嘗試處理無法在您的文件中處理的文件打算的方式。我會推薦使用一個文件選擇框,例如你可以很容易地使用tKinter(即使tKinter是癌症)。

3

首先得到一個文件列表中特定文件夾

然後使用difflib.get_close_matches像這樣:

difflib.get_close_matches(user_specified_file, list_of_files) 

找到「好」的比賽。

NB:考慮把一個提供小cutoff即0.1通過@tobias_k的建議,以確保你做你得到一個比賽總是爲0.6方式默認截止有時什麼也沒有將是一個「門當戶對」的用戶什麼進入。

同樣,如果您只需要獲取一個文件名,還可以傳入可選參數n=1以獲得最接近的匹配,因爲如果您不指定它,您將獲得3個最佳匹配。

+0

也許通過'cutoff = somesmallnumber'來獲得_any_匹配也是有用的,即使它不是非常相似,而不是完全不匹配。 –

相關問題