在我重新发明这个特殊的轮子之前,有没有人有一个很好的例程来使用 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.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并获得了相应的性能提升。
walk
scandir
os.walk
2019 年更新
最近我用pathlib的越来越多,这里有一个pathlib解决办法:
pathlib
from pathlib import Path root_directory = Path('.') sum(f.stat().st_size for f in root_directory.glob('**/*') if f.is_file())