【发布时间】:2018-11-29 14:20:02
【问题描述】:
我需要通过递归搜索生成一个包含特定字符串的路径的文件列表。我目前正在这样做:
for i in iglob(starting_directory+'/**/*', recursive=True):
if filemask in i.split('\\')[-1]: # ignore directories that contain the filemask
filelist.append(i)
这可行,但是在爬取大型目录树时,速度非常慢(约 10 分钟)。我们在 Windows 上,因此无法选择对 unix find 命令进行外部调用。我的理解是 glob 比 os.walk 快。
有更快的方法吗?
【问题讨论】:
-
这是什么版本的python?在PEP 471 之后,
glob.iglob和os.walk都被更新为快 2-20 倍。 -
我正在运行 python 3.6。对于每个人的 SA,您所指的 PEP 是从 2014 年开始的。
-
是的,但是很多人仍然使用没有这些优势的python 2.7。我用
os.walk和glob.iglob和walk运行了一个测试用例,它比iglob快20%,遍历需要大约5 秒的目录结构。我不认为你会用 python 变得更快。也许试试 cygwin 的find。