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