Acabei de escrever isso em cerca de 5 minutos. Em vez de os.path.getsize eu uso st_size de os.stat. Eu não acho que isso realmente importe. Eu uso os.walk para recursivamente "andar" através de todos os diretórios no atual diretor de trabalho '.' Isso não foi escrito para eficiência ou desempenho em mente, apenas para conseguir alguma coisa. O resultado final é um dicionário preenchido com extensões de arquivo para chaves e cada valor é convertido em uma string representando um formato legível por humanos do tamanho total para cada tipo de arquivo. Eu peguei um método escrito por outra pessoa para fazer a formatação humana. A última parte é um smancy de fantasia para ordenar os tipos de arquivo por tamanho. Se você apertar ctrl + c, ele mata o "dimensionamento" e apenas imprime os resultados que ele teve tempo de coletar. Muito divertido! Obrigado pelo passeio, aproveite.
import os
#using code ripped from:
#http://www.5dollarwhitebox.org/drupal/node/84
#to convert to human readable format
def convert_bytes(bytes):
bytes = float(bytes)
if bytes >= 1099511627776:
terabytes = bytes / 1099511627776
size = '%.2fT' % terabytes
elif bytes >= 1073741824:
gigabytes = bytes / 1073741824
size = '%.2fG' % gigabytes
elif bytes >= 1048576:
megabytes = bytes / 1048576
size = '%.2fM' % megabytes
elif bytes >= 1024:
kilobytes = bytes / 1024
size = '%.2fK' % kilobytes
else:
size = '%.2fb' % bytes
return size
typesizeH = {}
typesize = {}
try:
for root, dirs, files in os.walk('.'):
for file in files:
prefix, extension = os.path.splitext(file)
if extension not in typesize:
typesize[extension] = 0
typesize[extension] += os.stat(root + os.sep + file).st_size
except KeyboardInterrupt:
pass
for key in typesize:
typesizeH[key] = convert_bytes(typesize[key])
print str(typesizeH)
types = typesize.keys()
types.sort(cmp=lambda a,b: cmp(typesize[a], typesize[b]), reverse=True)
print "Filetype\tSize"
for type in types:
print "%s\t%s" % (type, typesizeH[type])
Resultado:
Filetype Size
.7z 99.84M
.hpp 42.88M
.lib 39.40M
.ncb 28.50M
.dll 27.87M
.exe 25.26M
.h 10.33M
.obj 10.18M
.zip 6.83M
.svn-base 3.92M
3.52M
.txt 2.28M
.csv 1.09M