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

Python 2.7 查找目录大小的高效python函数,python-2.7,Python 2.7,上面的函数大约需要25秒才能找到现在包含大量文件的目录的大小。有没有人能告诉我一些有效的函数来执行同样的操作,这样查找大小的时间就更少了?问题不在于数据的大小,而在于包含数据的文件的数量(可能很小)。我不认为有什么方法可以显著优化您的方法-系统实用程序,如du使用相同的方法计算大小。然而,以下是一些建议,按难度和有效性的增加排序: 对于一个小的加速,您可以使用自己的os.walk变体,该变体从用于区分文件和目录的相同os.stat调用中获取文件大小。由于系统调用的数量减少,这可能会为您赢得一秒

上面的函数大约需要25秒才能找到现在包含大量文件的目录的大小。有没有人能告诉我一些有效的函数来执行同样的操作,这样查找大小的时间就更少了?

问题不在于数据的大小,而在于包含数据的文件的数量(可能很小)。我不认为有什么方法可以显著优化您的方法-系统实用程序,如
du
使用相同的方法计算大小。然而,以下是一些建议,按难度和有效性的增加排序:

  • 对于一个小的加速,您可以使用自己的
    os.walk
    变体,该变体从用于区分文件和目录的相同
    os.stat
    调用中获取文件大小。由于系统调用的数量减少,这可能会为您赢得一秒钟的时间

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

  • 更改写入数据的代码,以同时在单个数据库(比如sqlite)中保持总大小或文件大小索引,该索引本身可以被索引。这将使大小查找瞬间完成

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

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)