如何用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
相关产品推荐
相关产品推荐

