Python 在 Sublime Text 3 中:oslist 目录;仅列出特定的扩展

Python in Sublime Text 3: oslist dir; list specific extensions only

我正在尝试对 this Sublime Text 3 plugin 做一些小调整,这是我第一次尝试 Python。

当在键盘中输入命令 [[ 时,该插件会提供一个 Markdown 文件列表。问题是我不想出现的其他文件出现在列表中!

根据我收集到的信息,大部分命令需要 os.listdir(directory)。我知道尝试仅列出带有 os.listdir 的特定扩展名之前已被询问过,例如 here and here,但我只是不明白如何将这些答案实现到我拥有的代码中.就像其他人所寻求的那样,我试图弄清楚如何使用 os.listdir 仅显示 .md 文件,但例外情况是我正在寻找所以在这个插件的范围内。

完整的插件代码可用here

下面是一段摘录,其中包括我认为与我的困境更相关的细节。

class GetWikiLinkCommand(sublime_plugin.TextCommand):
    def on_done(self, selection):
        if selection == -1:
            self.view.run_command(
                "insert_wiki_link", {"args":
                {'text': '[['}})
            return
        self.view.run_command(
            "insert_wiki_link", {"args":
            {'text': '[['+self.modified_files[selection]+']]'}})

    def run(self, edit):
        settings = sublime.load_settings('MyWiki.sublime-settings')
        directory = settings.get('wiki_directory')
        directory = os.path.expanduser(directory)
        extension = settings.get('wiki_extension')

        self.outputText = '[['
        self.files = os.listdir(directory) 
        self.modified_files = [item.replace(extension,"") for item in self.files]
        self.view.window().show_quick_panel(self.modified_files, self.on_done)

谢谢!!!

可能最简单的解决方法是更改​​此行:

self.files = os.listdir(directory)

self.files = [f for f in os.listdir(directory) if f.endswith('.md')]

或者,如果您将 globos.path 添加到导入语句,您可以:

self.files = [os.path.basename(p) for p in glob.glob(os.path.join(directory, '*.md'))]

如果 glob 能够更快地过滤文件,这可能会更高效 - 不确定。