我正在访问一个目录,其中包含多个子目录,并且子目录中可能还有子目录。
Folder
+-Sub1
| +-SubSub1
| +-File1
+-Sub2
| +-File2
+-Sub3
| +-File3
| +-File4
+-Sub4
+-File5
+-SubSub2
+-File6
我想获取每个子文件夹(Sub1、Sub2 等)的完整大小。我还需要获取每个文件夹的名称。例如:
Sub1 is 34 MB
Sub2 is 2893 MB
...
我目前有以下内容:
for r, d, f in os.walk(directory):
size = sum(getsize(join(r,n)) for n in f) / 1048576
print size
for s in d:
print s
打印出所有大小,后跟所有目录名称,因为它们各自位于单独的 for 循环中。如何按上述方式打印它?
最佳答案
第一步,请尝试以下操作:
import os
for r, d, f in os.walk('.'):
size = sum(os.path.getsize(os.path.join(r,n)) for n in f) / 1048576
print "{} is {}".format(r, size)
在我的电脑上,结果是这样的:
. is 1
./Sub4 is 1
./Sub4/SubSub2 is 1
./Sub3 is 2
./Sub2 is 1
./Sub1 is 1
./Sub1/SubSub1 is 0
这至少会在相关大小旁边打印目录名称。
下一步,您需要找到一种方法将下级目录的大小求和为父目录的大小。在这个例子中,我使用字典来记住子目录的大小:
import os
dir_sizes = {}
for r, d, f in os.walk('.', False):
size = sum(os.path.getsize(os.path.join(r,f)) for f in f+d)
size += sum(dir_sizes[os.path.join(r,d)] for d in d)
dir_sizes[r] = size
print "{} is {} MB".format(r, size/2**20)
结果(每个FileN
为1兆字节):
./Sub4/SubSub2 is 1 MB
./Sub4 is 2 MB
./Sub3 is 2 MB
./Sub2 is 1 MB
./Sub1/SubSub1 is 0 MB
./Sub1 is 1 MB
. is 6 MB
关于python - 在python中获取子目录的目录大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25024371/