Pythonを使うと、ファイルサイズを簡単に取得できます。実務ではログ管理やデータ処理に役立つため、知っておくと非常に便利です。本記事では初心者でも理解できるように、基本から応用まで丁寧に解説します。
なぜPythonでファイルサイズを取得するのか
ファイルサイズの取得は、システム開発や日常的な作業の中で意外と出番が多い処理です。たとえば、アップロードされたファイルが一定サイズを超えていないかをチェックしたり、バックアップ対象の容量を見積もったりする場面があります。さらに、ディスク容量の監視やデータ処理の効率化にもつながるため、Pythonを使って自動化するメリットは大きいです。手作業で確認するよりも格段に効率的なので、開発者にとって習得しておくべき基本スキルのひとつだといえます。
基本の方法:os.path.getsizeを使う
最もシンプルな方法はos.path.getsize()
を使うことです。この関数にファイルパスを渡すと、ファイルのサイズをバイト単位で返してくれます。
import os
file_path = "sample.txt"
size = os.path.getsize(file_path)
print(f"サイズ: {size} バイト")
この方法はシンプルで初心者にもわかりやすいです。ただし、ディレクトリを指定するとエラーになるため注意が必要です。また、バイト単位のままだと大きなファイルでは読みづらいため、次に紹介するようにKBやMBに変換する工夫も大切です。
ファイルサイズを人間が読みやすい形式に変換する
バイト単位のままでは直感的にサイズを把握しにくいです。そのため、KBやMB、GBに変換して表示すると実用的です。以下のコードは変換用の関数を定義した例です。
import os
def convert_size(size_bytes):
if size_bytes == 0:
return "0B"
units = ["B", "KB", "MB", "GB", "TB"]
index = 0
while size_bytes >= 1024 and index < len(units) - 1:
size_bytes /= 1024
index += 1
return f"{round(size_bytes, 2)} {units[index]}"
file_path = "sample.txt"
size = os.path.getsize(file_path)
print(convert_size(size))
この関数を使えば、10,485,760 バイトが「10 MB」といった形で出力されるため、とても分かりやすくなります。特にログや管理画面で表示するときには必須の工夫です。
応用編:複数ファイルのサイズをまとめて取得する
実務では複数のファイルサイズをまとめて確認したい場面も多いです。そこで、os.listdir()
やpathlib
を組み合わせると便利です。
import os
dir_path = "./sample"
for file in os.listdir(dir_path):
full_path = os.path.join(dir_path, file)
if os.path.isfile(full_path):
size = os.path.getsize(full_path)
print(f"{file}: {size} バイト")
このコードでは、指定ディレクトリ内のすべてのファイルについてサイズを出力できます。データフォルダやバックアップ用のディレクトリをチェックする際に便利です。
よりPythonicに:pathlibでファイルサイズを取得する
Python 3.4以降ではpathlib
の利用が推奨されています。パス操作をオブジェクト指向的に扱えるため、コードが読みやすく直感的になります。
from pathlib import Path
file_path = Path("sample.txt")
size = file_path.stat().st_size
print(f"サイズ: {size} バイト")
stat()
を使うと、ファイルサイズ以外にも更新日時や作成日時など多くの情報を取得できます。実務での応用範囲が広いため、pathlib
を使いこなすことをおすすめします。
ディレクトリ全体の合計サイズを求める
単一ファイルだけでなく、ディレクトリ全体の容量を求めたい場合もあります。これは、すべてのファイルサイズを合計することで実現できます。
import os
def get_dir_size(path):
total = 0
for root, dirs, files in os.walk(path):
for file in files:
full_path = os.path.join(root, file)
total += os.path.getsize(full_path)
return total
print(get_dir_size("./sample"))
このコードでは、サブディレクトリを含むすべてのファイルサイズを再帰的に合計します。バックアップや容量制限のある処理を行うときに特に役立ちます。
よくあるエラーと注意点
ファイルが存在しない場合
存在しないパスを指定するとFileNotFoundError
が発生します。事前にos.path.exists()
やPath.exists()
で確認することが大切です。
ディレクトリを指定してしまう場合
os.path.getsize()
はディレクトリに対しては適切に動作しません。ファイルかどうかをos.path.isfile()
で確認してから実行するようにしましょう。
大容量ファイルの扱い
非常に大きなファイルサイズを扱う場合、環境によっては整数の扱いに注意が必要です。Pythonは大きな数値も扱えますが、出力形式を工夫して見やすくすることが重要です。
応用テクニック:特定の拡張子だけを対象にする
フォルダ内のすべてのファイルではなく、特定の種類のファイルだけを対象にサイズを集計するケースもあります。例えば「CSVファイルだけ容量を知りたい」という場合です。
from pathlib import Path
dir_path = Path("./sample")
csv_files = list(dir_path.glob("*.csv"))
total = sum(f.stat().st_size for f in csv_files)
print(f"CSV合計サイズ: {total} バイト")
この方法なら、効率よく必要な情報だけを取得できます。実際の業務でもよく使われるパターンです。
Python初心者におすすめのサービス
「もっと実践的なコード例が欲しい」「自分の用途に合わせて教えてほしい」という方には、
テックアカデミーがおすすめです。
AI関連コースやシステム開発コース、アプリ開発コースなど豊富な学習が可能です。
さらに今なら無料相談でアマギフプレゼントもあるので、気軽にお申込みしてみてください。
また、プログラミング学習のプラットフォームとして、ココナラでは、現役エンジニアや経験豊富なPython講師が、あなたのレベルや目的に合わせてマンツーマンで指導してくれます。
書籍や動画ではカバーしきれない、あなた専用のカリキュラムで学べるのが最大の魅力。短時間で効率的にスキルを伸ばしたいなら、まずは出品者のサービスをチェックしてみましょう。
また、教える側としてスキルを活かして副業・独立を目指すことも可能です。
プログラミング経験やPythonの知識があれば、自分の得意分野をサービスとして出品し、全国の学習者から直接依頼を受けられます。オンラインで完結するため、場所や時間に縛られず、自分のペースで働けるのも大きなメリットです。
こちらのリンクから詳細をチェックしてみてください。
まとめ
Pythonでファイルサイズを取得する方法は、基本のos.path.getsize
から始まり、pathlib
や応用的なディレクトリ全体の合計取得まで幅広くあります。用途に応じて最適な方法を選び、効率的にファイル管理を行いましょう。
以下のリンクから、
SESの組込みシステムから色々な不満を持ち、自社WEBサービスへ転職した実体験の記事がありますので、是非読んでみてください。とても喜びます。
SESの組込みシステムから自社WEBサービスのエンジニアに転職した話

コメント