Я только написал это приблизительно через 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