Python でファイルサイズを取得する

ファイルサイズを取得するには os.path.getsize() または pathlib.Path.stat() を使う。

import os

size = os.path.getsize('data.txt')
print(size)  # バイト数

os.path.getsize() はファイルサイズをバイト単位で返す。ファイルが存在しない場合は FileNotFoundError が発生する。

pathlib を使う方法

pathlib では stat() メソッドでファイルの情報を取得し、st_size 属性でサイズを得る。

from pathlib import Path

path = Path('data.txt')
size = path.stat().st_size
print(size)  # バイト数

人間が読みやすい形式に変換する

バイト数を KB や MB などの単位に変換する関数を作ると便利だ。

def format_size(size_bytes):
    for unit in ['B', 'KB', 'MB', 'GB', 'TB']:
        if size_bytes < 1024:
            return f'{size_bytes:.1f} {unit}'
        size_bytes /= 1024
    return f'{size_bytes:.1f} PB'

import os
size = os.path.getsize('video.mp4')
print(format_size(size))  # 例: 256.5 MB

ディレクトリの合計サイズを取得する

ディレクトリ内のすべてのファイルの合計サイズを取得するには、再帰的にファイルを走査する。

from pathlib import Path

def get_directory_size(path):
    total = 0
    for file in Path(path).rglob('*'):
        if file.is_file():
            total += file.stat().st_size
    return total

size = get_directory_size('mydir')
print(f'{size / (1024 ** 2):.2f} MB')

os.stat を使う方法

os.stat() を使うと、ファイルサイズ以外にも様々な情報を取得できる。

import os

stat_info = os.stat('data.txt')

print(stat_info.st_size)   # ファイルサイズ(バイト)
print(stat_info.st_mtime)  # 最終更新時刻(UNIX時間)
print(stat_info.st_mode)   # ファイルモード(パーミッション)