Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでディレクトリサイズを計算する方法:os.walkとduコマンドの使い方

ディレクトリのサイズを取得するには、ディレクトリツリー全体を走査し、含まれる各ファイルのサイズを合計する必要があります。これには、Python標準ライブラリの os.walk() 関数と os.path.getsize() 関数を組み合わせて使用します。

サンプルコード

import os

total_size = 0
start_path = '.'  # カレントディレクトリのサイズを取得する場合
for path, dirs, files in os.walk(start_path):
    for f in files:
        fp = os.path.join(path, f)
        total_size += os.path.getsize(fp)

print("Directory size: " + str(total_size))

このコードでは、os.walk() が指定したパス以下のすべてのサブディレクトリとファイルを再帰的にたどり、os.path.getsize() が各ファイルのサイズをバイト単位で返します。それらを合計することで、ディレクトリ全体のサイズを求められます。この方法はOSに依存しないため、Windows環境でもそのまま動作するのがメリットです。

*NIX系OSならduコマンドを利用するのが簡単

LinuxやmacOSなどの *NIX 系OSを使用している場合は、subprocess モジュール経由で du コマンドを呼び出す方法が、上記よりもはるかにシンプルです。

サンプルコード

import subprocess

path = '.'
size = subprocess.check_output(['du', '-sh', path]).split()[0].decode('utf-8')
print("Directory size: " + size)

du -sh コマンドは、指定したパスの合計サイズを人間が読みやすい形式(例:1.5M)で出力します。戻り値はバイト列として得られるため、.split() で最初の要素(サイズ部分)を取り出し、.decode('utf-8') で文字列に変換しています。シンボリックリンクの扱いなどを細かく制御したい場合は、du コマンドのオプションを追加するとよいでしょう。

実行結果

いずれのプログラムを実行しても、次のような出力が得られます。

Directory size: 1524664

用途に応じて使い分けるのがおすすめです。クロスプラットフォーム性が必要な場合は os.walk() を使った方法を、*NIX 系OSに限定できる場合は簡潔な du コマンド方式を選択しましょう。

  1. Pythonでディレクトリを作成する方法をわかりやすく解説

    Pythonでディレクトリを作成する基本方法 Pythonでディレクトリ(フォルダ)を作成するには、まず os.path.exists() を使って、そのディレクトリがすでに存在するかどうかを確認します。存在しない場合のみ作成することで、エラーの発生を防ぐことができます。 import os if not os.path.exists(my_folder): os.makedirs(my_folder) os.makedirs() は、指定したパスの中間ディレクトリも必要に応じて自動的に作成してくれる便利な関数です。 EAFPスタイルでの書き方 Pythonでは「EAFP(Easi

  2. Pythonでファイルを削除する方法をわかりやすく解説

    Pythonでファイルを削除する基本の方法 Pythonでは、標準ライブラリのosモジュールを使うことで、単一のファイルや空のフォルダ(ディレクトリ)を簡単に削除できます。外部ライブラリのインストールは不要で、import osと記述するだけですぐに利用できるのが魅力です。 os.remove() でファイルを削除する たとえば、カレントディレクトリにある my_file.txt というファイルを削除したい場合は、次のように記述します。 >>> import os >>> os.remove(my_file.txt) os.remove() の引数には、削