在我重新发明这个轮子之前,有没有人有一个用Python计算目录大小的好例程?如果例程能很好地将大小格式化为Mb/Gb等,那就太好了。
发布于 2014-08-30 03:00:48
到目前为止,建议的一些方法实现了递归,其他方法使用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
发布于 2010-12-07 00:12:22
下面是一个递归函数(它递归地汇总所有子文件夹及其各自文件的大小),它返回与运行"du -sb“时完全相同的字节。在linux中(其中的".“表示“当前文件夹”):
import os
def getFolderSize(folder):
total_size = os.path.getsize(folder)
for item in os.listdir(folder):
itempath = os.path.join(folder, item)
if os.path.isfile(itempath):
total_size += os.path.getsize(itempath)
elif os.path.isdir(itempath):
total_size += getFolderSize(itempath)
return total_size
print "Size: " + str(getFolderSize("."))
发布于 2016-05-22 05:01:23
使用os.scandir
的Python3.5递归文件夹大小
def folder_size(path='.'):
total = 0
for entry in os.scandir(path):
if entry.is_file():
total += entry.stat().st_size
elif entry.is_dir():
total += folder_size(entry.path)
return total
https://stackoverflow.com/questions/1392413
复制相似问题