python-2.7 - 高效的python函数查找目录的大小

标签 python-2.7

def getSize(path):
    start_time = time.time()
    totalSize = 0
    if os.path.isdir(path):

        for dirpath, dirnames, filenames in os.walk(path):
            for fName in filenames:
                fp = os.path.join(dirpath, fName)
                totalSize += os.path.getsize(fp)
        print time.time() - start_time, "seconds"
        return totalSize

    else:
        return os.path.getsize(path)

上述函数需要大约 25 秒才能找到当前包含大量文件的目录的大小。谁能告诉我一些有效的函数来做同样的事情,这样找到尺寸的时间就更少了?

最佳答案

问题不在于数据的大小,而在于包含它的(可能很小的)文件的数量。我看不出有什么方法可以显着优化您的方法 - 像 du 这样的系统实用程序使用相同的方法计算大小。不过,这里有一些建议,按照难度和有效性的递增顺序排列:

  • 为了小幅加速,您可以推出您自己的 os.walk 变体,它从用于区分两者的相同 os.stat 调用中获取文件大小文件和目录。由于减少了系统调用的数量,这可能会给您带来一秒钟的时间。

  • 您可以在 Python/C 或 Cython 中编写 getSize 代码,以避免在检查大量文件和目录时产生解释器开销。这最多可能会让你多等几秒钟。

  • 更改写入 数据的代码,以同时维护总大小,或单个数据库(想想 sqlite)中的文件大小索引,它本身可以被索引。这将使尺寸查找瞬间完成。

  • 使用 inotify 监控正在写入的目录或等价物,并像以前一样将结果保存到数据库中。只要与读取相比写入不频繁,这将是一个净赢的工作。它更难实现,但它的好处是不需要更改编写代码的代码。

关于python-2.7 - 高效的python函数查找目录的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15218192/

相关文章:

python - 如何清理正则表达式

python-2.7 - 并行执行时,Tensorflow 的 tf.while_loop 是否自动捕获依赖项?

python-2.7 - 使用matplotlib中的一组标量值为球体表面着色

python - Autotools - 当 Python 3 可用时使用 Python 2.7

python - 在没有实例化的情况下订购类方法

python-2.7 - Python 中 OpenCV3 中的 CreateMemStorage() 等效于什么?

python - 调试 ansible 跟踪以查找 python 云堆栈模块中可能存在的错误

python - 在Python中控制线程

python-2.7 - 如何更新 pandas 数据框列中的值,直到同一列中第一次出现值?

python - 使用python在MySQL中添加数据