【发布时间】:2013-01-31 22:26:12
【问题描述】:
如何在计算 python 跨平台中的所有文件的同时快速计算大目录的大小,这是我当前的代码,但在大文件数(超过 100000)上非常慢:
class filecounter:
def count(self, scandir):
global filescount
global totalsize
if not scandir[-1] == '/' or '\\':
scandir = scandir + '/'
try:
for item in os.listdir(scandir):
if os.path.isdir(scandir + item):
filecounter().count(scandir + item)
else:
totalsize = totalsize + os.path.getsize(scandir +item)
filescount = filescount + 1
except WindowsError, IOError:
pass
需要全局
【问题讨论】:
-
为什么不改用
os.walk()? -
if not scandir[-1] == '/' or '\\'不会按照你的想法去做。请改用if scandir[-1] not in ('/', '\\')。 -
P.S.如果您正确编码,则不需要全局 - 让函数将这两个值作为元组或列表返回。
-
@user1469729 你确定需要捕获这些异常吗?如果没有 try-except 保护,它会运行得更快
-
P.P.S.你可能会被卡住。由于没有同时返回文件名和大小的函数,因此您需要查找每个文件的大小。随着目录变大,操作系统需要更长的时间来检索大小 - 一个经典的
n^2问题。
标签: python file operating-system