「ファイルサイズ取得」は“重さを意識した”業務自動化の入口
業務自動化をしていると、
「このファイル、どれくらいの容量があるんだろう?」
「大きすぎるファイルはスキップしたい」
「バックアップ前にサイズをログに残したい」
といった場面が必ず出てきます。
そこで使うのが「ファイルサイズ取得」です。
Pythonでは os.path.getsize() を使うのが基本形で、バイト単位のサイズが簡単に取れます。
ここから、初心者向けに「まずこれだけ押さえればOK」というところから、実務テンプレートまで一気に整理していきます。
基本の関数:os.path.getsize でファイルサイズを取る
いちばんシンプルなコード
まずは「1つのファイルのサイズを取得して表示する」最小コードです。
import os
path = "data/report.csv"
size = os.path.getsize(path)
print(size, "bytes")
Pythonos.path.getsize(path) は、そのファイルのサイズを「バイト単位の整数」で返します。
例えば 1024 なら 1024バイト、1048576 なら 1,048,576バイト(=1MB)です。
ここで大事なのは、「単位はバイト」であることと、「存在しないファイルを指定するとエラーになる」という2点です。
重要ポイントを深掘り:存在しないファイルを指定したらどうなるか
FileNotFoundError を避けるための存在確認
os.path.getsize() は、ファイルが存在しないと FileNotFoundError を投げます。
業務バッチでこれをやると、夜中の処理が途中で落ちてしまうことになります。
そこで、「サイズを取る前に存在確認をする」のが安全な書き方です。
import os
path = "data/report.csv"
if not os.path.isfile(path):
print("エラー: ファイルが見つかりません:", path)
else:
size = os.path.getsize(path)
print("サイズ:", size, "bytes")
Pythonここでは os.path.isfile() を使って、「存在する」かつ「ファイルである」ことを確認しています。
「存在確認 → サイズ取得」という順番をテンプレートとして覚えておくと、エラーをかなり減らせます。
単位変換:バイトをKB / MBに変えて人間に優しくする
バイトのままだと直感的に分かりにくい
1048576 bytes と言われても、パッと見て「1MBだな」と分かる人は少数派です。
人間が見て理解しやすいのは、KB(キロバイト)や MB(メガバイト)です。
バイトからKBに変換するには、1024で割ります。
import os
path = "data/report.csv"
size_bytes = os.path.getsize(path)
size_kb = size_bytes / 1024
size_mb = size_bytes / 1024 / 1024
print(f"{size_bytes} bytes")
print(f"{size_kb:.2f} KB")
print(f"{size_mb:.2f} MB")
Python:.2f は「小数点以下2桁まで表示」という意味です。
ログやレポートに出すときは、MB表示にしておくと一目でイメージしやすくなります。
例題①:大きすぎるファイルをスキップするテンプレート
シナリオ
inbox フォルダにファイルがたくさんあり、
「10MBを超えるファイルは処理対象から外したい」というケースを考えます。
コード例
import os
folder = "inbox"
limit_mb = 10
limit_bytes = limit_mb * 1024 * 1024
for name in os.listdir(folder):
path = os.path.join(folder, name)
if not os.path.isfile(path):
continue
size = os.path.getsize(path)
if size > limit_bytes:
print("スキップ(大きすぎ):", name, f"({size / 1024 / 1024:.2f} MB)")
continue
print("処理対象:", name, f"({size / 1024 / 1024:.2f} MB)")
# ここで実際の処理を書く
Pythonこのテンプレートには、業務自動化でよく使う考え方が詰まっています。
まず「候補を全部取る」。
次に「ファイルだけに絞る」。
そして「サイズ条件でさらに絞る」。
「サイズでフィルタする」という発想が入るだけで、
「巨大ファイルが混ざっていて処理が異常に遅い」といったトラブルを避けやすくなります。
例題②:フォルダ内のファイルサイズ合計を求める
シナリオ
logs フォルダがどれくらいディスクを食っているか知りたい。
つまり、「フォルダ内のファイルサイズ合計」を出したい、というケースです。
コード例(シンプル版)
import os
folder = "logs"
total = 0
for name in os.listdir(folder):
path = os.path.join(folder, name)
if not os.path.isfile(path):
continue
total += os.path.getsize(path)
print("合計サイズ:", total, "bytes")
print("合計サイズ:", total / 1024 / 1024, "MB")
Pythonここではサブフォルダの中までは見ていません。
「直下のファイルだけ」であれば、このシンプルな形で十分です。
os.scandir を使った少し効率の良い書き方
フォルダサイズの合計を出すときは、os.scandir() を使うと効率よく書けます。
import os
folder = "logs"
total = 0
with os.scandir(folder) as it:
for entry in it:
if entry.is_file():
total += entry.stat().st_size
print("合計サイズ:", total, "bytes")
print("合計サイズ:", total / 1024 / 1024, "MB")
Pythonentry.stat().st_size は、そのファイルのサイズ(バイト)です。
os.listdir 版より少し高度ですが、「フォルダサイズをよく見る」ような業務では覚えておくと便利です。
例題③:バックアップログに「サイズ情報」を残す
シナリオ
ファイルをバックアップするときに、
「いつ・どのファイルを・どれくらいのサイズでバックアップしたか」をログに残したい。
コード例
import os
import shutil
from datetime import datetime
src = "data/report.csv"
dst_dir = "backup"
dst = os.path.join(dst_dir, "report.csv")
log_file = "backup.log"
os.makedirs(dst_dir, exist_ok=True)
if not os.path.isfile(src):
print("エラー: バックアップ元がありません:", src)
else:
size = os.path.getsize(src)
shutil.copy(src, dst)
with open(log_file, "a", encoding="utf-8") as f:
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
mb = size / 1024 / 1024
f.write(f"{now}\t{src}\t{dst}\t{size} bytes ({mb:.2f} MB)\n")
print("バックアップ完了:", dst)
Pythonここでは「サイズを取る」ことが、
「バックアップの証跡を残す」という業務的な意味を持っています。
サイズ情報があると、
「いつから急にファイルが大きくなったのか」
「バックアップ先の容量が足りなくなりそうか」
といった判断がしやすくなります。
pathlib を使った、少しモダンな書き方
Path.stat().st_size でサイズを取る
pathlib を使うと、パス操作とサイズ取得をオブジェクト指向っぽく書けます。
from pathlib import Path
p = Path("data/report.csv")
if p.is_file():
size = p.stat().st_size
print("サイズ:", size, "bytes")
else:
print("ファイルがありません:", p)
Pythonp.stat().st_size がファイルサイズ(バイト)です。os.path 版とやっていることは同じなので、
まずは os.path.getsize に慣れてから pathlib に移行しても十分です。
まとめ:「サイズを意識する」だけで業務自動化は一段レベルアップする
ファイルサイズ取得は、一見地味ですが、業務自動化ではかなり重要な役割を持ちます。
大きすぎるファイルをスキップして処理を安定させる。
フォルダの容量を把握して、ディスク逼迫を防ぐ。
バックアップやログにサイズ情報を残して、後から状況を追えるようにする。
そのための基本ツールが os.path.getsize() です。
まずは、あなたのPCにある適当なファイルパスを path に入れて、
今日のサンプルをそのまま動かしてみてください。
「このファイル、こんなに重かったのか」という感覚が一度つかめると、
「じゃあ大きすぎるやつは自動で別フォルダに分けよう」
「一定サイズを超えたら警告メールを飛ばそう」
といった、次の自動化アイデアが自然に湧いてきます。
