You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python获取目录与文件的磁盘实际占用大小(Size on disk)

如何用Python获取文件/目录的磁盘实际占用大小(Size on Disk)

单个文件的磁盘占用获取

标准库实现(无需额外依赖)

使用os.stat()获取文件元数据,其中st_blocks字段代表文件占用的512字节块数量(POSIX标准定义,跨平台通用),乘以512即可得到实际磁盘占用的字节数:

import os

def get_file_disk_usage(file_path):
    stat_data = os.stat(file_path)
    # st_blocks 以512字节为单位,转换为实际字节数
    return stat_data.st_blocks * 512

调用示例:

print(get_file_disk_usage("/home/user/documents/report.pdf"))

第三方库简化(可选)

如果项目已使用psutil,可以借助它的API更直观地处理(本质仍是基于系统stat信息):

import psutil

def get_file_disk_usage(file_path):
    stat_data = psutil.os.stat(file_path)
    return stat_data.st_blocks * 512

目录的总磁盘占用获取

要计算整个目录(含子目录、文件、目录本身)的实际磁盘占用,需要递归遍历所有项并累加:

import os

def get_dir_total_disk_usage(dir_path):
    total_bytes = 0
    # 遍历目录下所有内容
    for root, _, files in os.walk(dir_path):
        # 累加当前目录本身的磁盘占用
        total_bytes += os.stat(root).st_blocks * 512
        # 累加目录下每个文件的磁盘占用
        for filename in files:
            file_path = os.path.join(root, filename)
            total_bytes += os.stat(file_path).st_blocks * 512
    return total_bytes

关键注意事项

  • 符号链接处理:如果要获取符号链接本身的占用(而非目标文件),将os.stat()替换为os.lstat()。
  • 特殊文件场景:对于压缩文件、稀疏文件,st_blocks*512会自动返回实际占用的磁盘空间,而非文件的逻辑大小(st_size)。
  • Windows兼容性:Windows系统下Python的os.stat()同样支持st_blocks字段,NTFS文件系统的压缩/稀疏文件场景也能正确计算实际占用。

内容的提问来源于stack exchange,提问作者Pro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:33:36