如何从python目录中获取子目录的大小?

时间:2018-02-06 17:41:37

标签: python python-3.x filesystems

以下是代码

import os
def get_size(path):
    total_size = 0
    for root, dirs, files in os.walk(path):
        for f in files:
            fp = os.path.join(root, f)
            total_size += os.path.getsize(fp)
    return total_size

for root,dirs,files in os.walk('F:\House'):
   print(get_size(dirs))

输出:

F:\House 21791204366
F:\House\house md 1832264906
F:\House\house md\house M D 1 1101710538
F:\House\Season 2 3035002265
F:\House\Season 3 3024588888
F:\House\Season 4 2028970391
F:\House\Season 5 3063415301
F:\House\Season 6 2664657424
F:\House\Season 7 3322229429
F:\House\Season 8 2820075762

我只需要在主目录之后的子目录及其大小。我的代码一直到最后一个目录并写下它的大小。

举个例子:

F:\House 21791204366
F:\House\house md 1832264906
F:\House\house md\house M D 1 1101710538

它打印了house md以及house M D 1house md中的子目录)的大小。但我只希望它直到house md子目录级别。

期望的输出: 我需要在主dir级别(由用户指定)之后的每个子目录的大小而不是子子目录(但它们的大小应该包含在父目录中。)

我该如何解决?

2 个答案:

答案 0 :(得分:0)

您可以将os.walkgetpath结合使用,而不是在listdir函数中使用isdir

for file in os.listdir(path):
    if not os.path.isdir(file):
        # Do your stuff
        total_size += os.path.getsize(fp)

        ...

os.walk将访问整个目录树,而listdir将只访问当前目录中的文件。

但是,请注意,这不会将子目录的大小添加到目录大小。因此,如果“第1季”有5个文件,每个100MB,5个目录,每个100 MB,那么你的功能报告的大小只有500MB。

提示:如果您想要添加子目录的大小,请使用递归。

答案 1 :(得分:0)

打印每个直接子目录的大小和父目录的总大小,类似于-命令:

du -bcs */

其中get_tree_size_scandir()[text in Russian, code in Python, C, C++, bash]

此处目录的大小是递归中的所有常规文件及其子目录的表观大小。它不会计算目录条目本身的大小或文件的实际磁盘使用量。相关:why is the output of du often so different from du -b