高效的python函数查找目录的大小
问题描述:
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秒来查找目前包含大量文件的目录的大小。难道有人会告诉我一些有效的功能来做同样的事情,以便找到更小的尺寸吗?高效的python函数查找目录的大小
答
问题不在于数据的大小,而在于包含它的(大概很小的)文件的数量。我没有看到明显优化您的方法的方法 - 像du
这样的系统实用程序使用相同的方法计算大小。不过,这里有几点建议,通过增加难度和有效性下令:
对于一个小的加速,你可以从使用的文件和目录区分同一
os.stat
调用获取文件的大小推出自己的os.walk
变种。由于系统调用的数量减少,这可能会让你买一秒。您可以在Python/C或Cython中编写
getSize
以避免在检查大量文件和目录时解释器开销。充其量只需几秒钟。更改该写入的数据也保持总大小,或者在一个单一的数据库中的文件大小索引码(源码认为),其本身可以被索引。这将使大小查找瞬间。
使用
inotify
或同等工具监视正在写入的目录,并像以前一样将结果保存到数据库中。只要与读取相比写入不频繁,这将是一个净赢的工作。实现起来比较困难,但它具有不需要修改写入代码的好处。