Python 業務自動化 | ファイル・フォルダ自動化:基本操作 - ファイルサイズ取得

Python Python
スポンサーリンク

「ファイルサイズ取得」は“重さを意識した”業務自動化の入口

業務自動化をしていると、
「このファイル、どれくらいの容量があるんだろう?」
「大きすぎるファイルはスキップしたい」
「バックアップ前にサイズをログに残したい」
といった場面が必ず出てきます。

そこで使うのが「ファイルサイズ取得」です。
Pythonでは os.path.getsize() を使うのが基本形で、バイト単位のサイズが簡単に取れます。

ここから、初心者向けに「まずこれだけ押さえればOK」というところから、実務テンプレートまで一気に整理していきます。


基本の関数:os.path.getsize でファイルサイズを取る

いちばんシンプルなコード

まずは「1つのファイルのサイズを取得して表示する」最小コードです。

import os

path = "data/report.csv"

size = os.path.getsize(path)
print(size, "bytes")
Python

os.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")
Python

entry.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)
Python

p.stat().st_size がファイルサイズ(バイト)です。
os.path 版とやっていることは同じなので、
まずは os.path.getsize に慣れてから pathlib に移行しても十分です。


まとめ:「サイズを意識する」だけで業務自動化は一段レベルアップする

ファイルサイズ取得は、一見地味ですが、業務自動化ではかなり重要な役割を持ちます。

大きすぎるファイルをスキップして処理を安定させる。
フォルダの容量を把握して、ディスク逼迫を防ぐ。
バックアップやログにサイズ情報を残して、後から状況を追えるようにする。

そのための基本ツールが os.path.getsize() です。

まずは、あなたのPCにある適当なファイルパスを path に入れて、
今日のサンプルをそのまま動かしてみてください。

「このファイル、こんなに重かったのか」という感覚が一度つかめると、
「じゃあ大きすぎるやつは自動で別フォルダに分けよう」
「一定サイズを超えたら警告メールを飛ばそう」
といった、次の自動化アイデアが自然に湧いてきます。

タイトルとURLをコピーしました