Я только написал это приблизительно через 5 минут. Вместо os.path.getsize я использую st_size os.stat. Я не думаю, что это действительно имеет значение. Я использую os.walk для рекурсивного "обхода" всех каталогов текущего рабочего директора ».«Это было написано не для эффективности или производительности, просто чтобы что-то сделать. Конечным результатом является словарь, заполненный расширениями файлов для ключей, и каждое значение преобразуется в строку, представляющую удобочитаемый формат общего размера для каждого типа файла. Я взял метод, написанный кем-то другим, чтобы сделать человеческое форматирование. Последняя часть - это какая-то необычная возможность сортировать типы файлов по размеру. Если вы нажмете Ctrl + C, это убьет "определение размера" и просто напечатает результаты, которые он успел собрать. Довольно весело! Спасибо за поездку, наслаждайтесь.
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])
Результат:
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