【Python】指定ディレクトリにあるフォルダごとの容量を調べる

ハードディスクやSSDの容量が減ってきたけど、どこで使っちゃっているんだろう?
そんなときのために、指定ディレクトリにあるフォルダごとに容量を調べる方法をご紹介します。

やること
・すべてのファイルとフォルダを調べて総容量を求める
・これらを指定ディレクトリ下のフォルダを対象に実施して結果表示する

それでは順番に見ていきましょう!

目次

順番にみていく

すべてのファイルとフォルダを調べて総容量を求める

調べたいディレクトリのパスを指定して、その下にあるファイルとフォルダすべてについて、容量を調べます。
加算していって総容量を求めます。

import os
from pathlib import Path

total_size = 0
with os.scandir(folder_path) as it:
    for item in it:
        if item.is_file():
            total_size += item.stat().st_size
        elif item.is_dir():
            total_size += get_folder_size(item.path)
return total_size

どんなファイルやフォルダがあるか調べているのが次です。

import os

with os.scandir(folder_path) as it:

容量を調べて加算しているのが次です。

import os

if item.is_file():
            total_size += item.stat().st_size

ちょっと変わっていますが、フォルダの場合は、自身を関数にしてもういちど実行させています。

def get_folder_size(folder_path):
    total_size = 0
    with os.scandir(folder_path) as it:
        for item in it:
            if item.is_file():
                total_size += item.stat().st_size
            elif item.is_dir():
                total_size += get_folder_size(item.path)
    return total_size

これらを指定ディレクトリ下のフォルダを対象に実施して結果表示する

先ほどの関数を利用します。
指定ディレクトリ下のフォルダについて実施して結果表示します。

import os
from pathlib import Path

folder_path = f"./"
for item in os.scandir(folder_path):
    if item.is_dir():
        folder_size = get_folder_size(item.path)
        print(f"{item.name}: {folder_size/1024/1024/1024:.3f} GB")

次の部分でフォルダだけを対象にしています。

for item in os.scandir(folder_path):
    if item.is_dir():

圧縮後のファイルを、指定ディレクトリ下に置きたかったので、絶対パス指定で圧縮後のファイル名を設定しました。

サンプルコード

これらを合体したものがこちらです。

import os
from pathlib import Path

def get_folder_size(folder_path):
    total_size = 0
    with os.scandir(folder_path) as it:
        for item in it:
            if item.is_file():
                total_size += item.stat().st_size
            elif item.is_dir():
                total_size += get_folder_size(item.path)
    return total_size

folder_path = f"./"
for item in os.scandir(folder_path):
    if item.is_dir():
        folder_size = get_folder_size(item.path)
        print(f"{item.name}: {folder_size/1024/1024/1024:.3f} GB")

今回は対象を実行ファイルの直下にしました。

実行結果がこちらです。

無事「A」「B」「C」それぞれのフォルダの容量を調べることができました。

以上です。
少しでもお役に立てれば幸いです。
それでは、読んで頂きありがとうございました!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次