【问题标题】:how to implement glob.glob如何实现 glob.glob
【发布时间】:2011-09-24 19:16:03
【问题描述】:

目前我的os.walk代码列表是指定目录下所有目录下的所有文件。

top = /home/bludiescript/tv-shows
        for dirpath, dirnames, filenames in os.walk(top):
               for filename in filenames:
                  print os.path.join([dirname, filename])

那我怎么添加

glob.glob(search)
search = self.search.get_text

搜索我在 gtk.Entry 中键入的模式

或者这不适用于我当前的代码

【问题讨论】:

    标签: python search pygtk glob os.walk


    【解决方案1】:

    你不想要glob,你想要fnmatch

    for dirpath, dirnames, filenames in os.walk(top):
        for filename in filenames:
            if fnmatch.fnmatch(filename, my_pattern):
                print os.path.join([dirname, filename])
    

    glob 完成了os.walk 已经完成的部分工作:检查磁盘以查找文件。 fnmatch 是纯字符串操作:这个文件名匹配这个模式吗?

    【讨论】:

    • 感谢您对此的了解,这对我学习 python 很有帮助
    • 我查看了顶部的 docs.python,它列出了模式 *、?、[seq] 和 [!seq],每个模式都在做不同的事情。现在我尝试如果 fnmatch.fnmatch(filename, [search]) 它给出了一个不可散列的“列表”错误
    • fnmatch 接受两个字符串,而不是字符串和列表。
    【解决方案2】:

    你不希望glob.glob为此;它会检查您已经检索到的目录中的名称。相反,使用fnmatch.fnmatch 将您的模式与您从os.walk 获得的路径名列表进行匹配(可能在您添加路径之前)。

    for filename in filenames:
        if fnmatch.fnmatch(filename, search):
            print os.path.join([dirname, filename])
    

    【讨论】:

    • 感谢输入和知识,以便清楚 glob 函数仅检查已找到目录的模式,即当前目录?
    • 它没有显示任何错误,但也没有打印任何内容 fnmatch 需要完整的文件名还是可以像单个单词一样使用文件名的一部分?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多