Cette opération parcourt tous les sous-répertoires, en additionnant les tailles des fichiers :
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')
Et un oneliner pour le plaisir en utilisant os.listdir ( N'inclut pas les sous-répertoires ) :
import os
sum(os.path.getsize(f) for f in os.listdir('.') if os.path.isfile(f))
Référence :
Mise à jour de Pour utiliser os.path.getsize Cette méthode est plus claire que l'utilisation de la méthode os.stat().st_size.
Merci à ghostdog74 de nous l'avoir signalé !
os.stat - st_size Donne la taille en octets. Peut également être utilisé pour obtenir la taille du fichier et d'autres informations relatives au fichier.
import os
nbytes = sum(d.stat().st_size for d in os.scandir('.') if d.is_file())
Mise à jour 2018
Si vous utilisez Python 3.4 ou une version antérieure, vous pouvez envisager d'utiliser l'option plus efficace walk
fournie par la tierce partie scandir
paquet. À partir de la version 3.5 de Python, ce paquetage a été intégré à la bibliothèque standard et à la bibliothèque de l'utilisateur. os.walk
a reçu l'augmentation correspondante des performances.
Mise à jour 2019
Récemment, j'ai utilisé pathlib
de plus en plus, voici un pathlib
solution :
from pathlib import Path
root_directory = Path('.')
sum(f.stat().st_size for f in root_directory.glob('**/*') if f.is_file())
16 votes
Ce ne serait PAS très agréable. Vous devriez avoir une fonction pour calculer la taille et une fonction tout à fait indépendante (qui pourrait être utilisée également avec les tailles de mémoire, par exemple) pour "formater joliment la taille en Mb/Gb etc".
20 votes
Oui je sais mais cela évite de poser deux questions.
3 votes
El
tree
sur les systèmes *nix fait tout cela gratuitement.tree -h -d --du /path/to/dir
.2 votes
@meh
du -sh /path/to/dir/*