python - 使用 Python 计算目录的大小?

在我重新发明这个特殊的轮子之前,有没有人有一个很好的例程来使用 Python 计算目录的大小?如果例程能以 Mb/Gb 等格式很好地格式化大小,那就太好了。

最佳答案

这会遍历所有子目录;汇总文件大小:

import os

def get_size(start_path = '.'):
    total_size = 0
    for dirpath, dirnames, filenames in os.walk(start_path):
        for f in filenames:
            fp = os.path.join(dirpath, f)
            # skip if it is symbolic link
            if not os.path.islink(fp):
                total_size += os.path.getsize(fp)

    return total_size

print(get_size(), 'bytes')

还有一个有趣的单线器,使用 os.listdir (不包括子目录):

import os
sum(os.path.getsize(f) for f in os.listdir('.') if os.path.isfile(f))

引用:

  • os.path.getsize - 以字节为单位给出大小
  • os.walk
  • os.path.islink

更新 使用 os.path.getsize,这比使用 os.stat().st_size 方法更清晰。

感谢 ghostdog74 指出这一点!

os.stat - st_size 以字节为单位给出大小。也可用于获取文件大小和其他文件相关信息。

import os

nbytes = sum(d.stat().st_size for d in os.scandir('.') if d.is_file())

2018 年更新

如果您使用 Python 3.4 或更早版本,则可以考虑使用第三方提供的更高效的 walk 方法scandir包裹。在 Python 3.5 及更高版本中,该包已被纳入标准库,os.walk 的性能也得到了相应的提升。

2019 年更新

最近我越来越多地使用pathlib,这里有一个pathlib的解决方案:

from pathlib import Path

root_directory = Path('.')
sum(f.stat().st_size for f in root_directory.glob('**/*') if f.is_file())

https://stackoverflow.com/questions/1392413/

相关文章:

python - Python 3's "函数注释有什么用?

linux - 如何让maven构建平台独立?

python - 在 Python 中构建完整路径文件名

linux - 如何将后台应用程序的输出重定向到/dev/null

linux - 检查目录是否用 bash 挂载

python - boto3 客户端 NoRegionError : You must specif

python - 如何前向声明一个函数以避免后面定义的函数出现 `NameError` s?

linux - 让 bash 脚本回答交互式提示

python - 在 Python 中记录未捕获的异常

python - 从python pandas中的列名获取列索引