python - 在python中获取子目录的目录大小

标签 python for-loop

我正在访问一个目录,其中包含多个子目录,并且子目录中可能还有子目录。

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/

相关文章:

java - 如何正确使用StringBuffer#insert?

javascript - 使用 .each() 处理 jQuery 函数时遇到问题

python - 为什么我的小数点四舍五入到一位有效数字?

python - 沙盒/逐行运行 python 代码

python - 如何找到 Pandas 中两个日期时间之间的差异?

python - Python openCV:无法显示图像

python - 忽略 `for` 语句中的异常

c - 如何将 feof 与 while 循环一起使用?

python - ctc损失函数崩溃

r - 使用 for 循环在 R 中创建字符串向量