2017-09-19 41 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_匹配也是有用的,即使它不是非常相似,而不是完全不匹配。 –

相关问题