如何实现glob.glob

1 投票
2 回答
1006 浏览
提问于 2025-04-17 03:00

目前我用 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 中输入的模式呢?

或者说,这个功能在我现在的代码里能实现吗?

2 个回答

4

你不需要用 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 则是一个纯粹的字符串操作:就是检查这个文件名是否符合这个模式。

2

你不需要用 glob.glob 来做这个,因为它是用来检查目录里的文件名,而这些文件名你已经拿到了。相反,你应该用 fnmatch.fnmatch 来把你的模式和你从 os.walk 得到的路径列表进行匹配(这通常是在你添加路径之前)。

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

撰写回答