更快到达os.walk或glob?

发布于 2021-01-29 15:09:54

我在大硬盘上用python中的文件查找搞乱了。我一直在寻找os.walk和glob。我通常使用os.walk,因为我发现它更加整洁,而且似乎速度更快(对于通常大小的目录)。

有没有人对他们俩有任何经验,可以说哪个更有效?正如我所说,glob似乎比较慢,但是您可以使用通配符等,就像walk一样,您必须过滤结果。这是查找核心转储的示例。

core = re.compile(r"core\.\d*")
for root, dirs, files in os.walk("/path/to/dir/")
    for file in files:
        if core.search(file):
            path = os.path.join(root,file)
            print "Deleting: " + path
            os.remove(path)

要么

for file in iglob("/path/to/dir/core.*")
    print "Deleting: " + file
    os.remove(file)
关注者
0
被浏览
101
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我对1000迪尔的少量网页缓存进行了研究。任务是计算dirs中的文件总数。输出为:

    os.listdir: 0.7268s, 1326786 files found
    os.walk: 3.6592s, 1326787 files found
    glob.glob: 2.0133s, 1326786 files found
    

    如您所见,os.listdir是最快的三个。并且glog.glob仍然比os.walk完成此任务更快。

    来源:

    import os, time, glob
    
    n, t = 0, time.time()
    for i in range(1000):
        n += len(os.listdir("./%d" % i))
    t = time.time() - t
    print "os.listdir: %.4fs, %d files found" % (t, n)
    
    n, t = 0, time.time()
    for root, dirs, files in os.walk("./"):
        for file in files:
            n += 1
    t = time.time() - t
    print "os.walk: %.4fs, %d files found" % (t, n)
    
    n, t = 0, time.time()
    for i in range(1000):
        n += len(glob.glob("./%d/*" % i))
    t = time.time() - t
    print "glob.glob: %.4fs, %d files found" % (t, n)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看