当前位置: 首页 > 面试题库 >

更快到达os.walk或glob?

鲁英卫
2023-03-14
问题内容

我在大硬盘上用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)

问题答案:

我对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)


 类似资料:
  • 问题内容: 这个问题对我来说只是个问题,因为我一直喜欢编写优化的代码,这些代码也可以在廉价的慢速服务器(或具有大量流量的服务器)上运行 我环顾四周,却找不到答案。我想知道在这两个示例之间有什么更快的方法,请牢记在我的案例中数组的键并不重要(自然是伪代码): 因为问题的关键不是数组冲突,所以我想补充一点,如果您担心冲突的插入,可以使用。它仍然可能导致冲突,但是当从用户提供的文件中读取时,它可以避免可

  • 我有一个案例,我有一组字段要在Solr中更新。我接收到的输入是映射的形式,键是字段名,值是更新的值。我有一个疑问,在这种情况下,我应该使用curl更新doc还是solrj,在那里我必须将映射转换为solrInputDocument,然后调用add命令。第一种方法会比第二种方法更快吗?

  • 问题内容: 我正在编写一种算法,在其中寻找一对值,这些值加在一起会导致我正在寻找另一个值。 我发现使用a 可以从O(n²)加速我的算法。后来我意识到我并没有真正使用我包含的值,因此就足够了。 我在Google上进行了幂搜索,但是在我的问题的标题中找不到这些方法的渐近运行时间的任何信息。 您能指出我应该在哪里寻找这些信息吗? 问题答案: 后来我意识到我并没有真正使用我包含的值,因此就足够了。 不仅是

  • 问题内容: 我正在构建与Twitter API交互的类,并且想知道PHP的内置XML或JSON解析器是否更快?Twitter会以两种格式向我发送相同的数据,因此PHP的性能将决定我的选择。我使用的是php_apc,因此您可以忽略解析时间,并假设我正在使用字节码。 谢谢! 更多:我只是想从数据中获取关联数组。我不是在做树遍历,节点迭代或任何太复杂的事情。格式将始终相同。(我希望!) 问题答案: 我没

  • 问题内容: 我想在代码中读取一个大文件。为此,read()或readline()更快。循环如何: 问题答案: 对于文本文件,仅使用循环对其进行遍历几乎总是可行的方法。没关系,速度是最干净的。 在某些版本的python中,实际上只读取一行,而循环读取大块并将其分成几行,因此速度可能更快。我认为Python的最新版本也使用缓冲,因此性能差异将很小(在微观上可能仍然更快,因为它避免了方法调用)。但是,出

  • 问题内容: 我正在寻找一种与作品一样的非递归步行方式。但是我需要以相同的方式退货。任何想法? 先感谢您。 问题答案: