在我重新发明这个特殊的轮子之前,有没有人有一个很好的例程来使用 Python 计算目录的大小?如果例程能够以 Mb/Gb 等格式很好地格式化大小,那就太好了。
原文由 Gary Willoughby 发布,翻译遵循 CC BY-SA 4.0 许可协议
在我重新发明这个特殊的轮子之前,有没有人有一个很好的例程来使用 Python 计算目录的大小?如果例程能够以 Mb/Gb 等格式很好地格式化大小,那就太好了。
原文由 Gary Willoughby 发布,翻译遵循 CC BY-SA 4.0 许可协议
目前建议的一些方法实现递归,其他方法使用 shell 或不会产生格式整齐的结果。当您的代码是针对 Linux 平台的一次性代码时,您可以像往常一样进行格式化,包括递归,作为单行代码。除了最后一行的 print
外,它适用于 python2
和 python3
的当前版本:
du.py
-----
#!/usr/bin/python3
import subprocess
def du(path):
"""disk usage in human readable format (e.g. '2,1GB')"""
return subprocess.check_output(['du','-sh', path]).split()[0].decode('utf-8')
if __name__ == "__main__":
print(du('.'))
简单、高效,适用于文件和多级目录:
$ chmod 750 du.py
$ ./du.py
2,9M
原文由 flaschbier 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.3k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
4 回答1.5k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答965 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
这将遍历所有子目录;总结文件大小:
以及使用 os.listdir 的有趣的单行代码( _不包括子目录_):
参考:
更新 要使用 os.path.getsize ,这比使用 os.stat().st_size 方法更清楚。
感谢 ghostdog74 指出这一点!
os.stat - _stsize 以字节为单位给出大小。也可用于获取文件大小和其他文件相关信息。
2018 年更新
如果你使用 Python 3.4 或更早版本,那么你可以考虑使用第三方包提供的更高效的
walk
方法scandir
包。在 Python 3.5 及更高版本中,此包已被纳入标准库,并且os.walk
获得了相应的性能提升。2019 年更新
最近我越来越多地使用
pathlib
,这是一个pathlib
解决方案: