См. Ниже быстрый и относительно простой для чтения способ печати размеров файлов в одной строке кода, если вы уже знаете, что хотите. Эти однострочники сочетают в себе отличный ответ @ccpizza выше с некоторыми удобными приемами форматирования, которые я прочитал здесь Как напечатать число с запятыми в качестве разделителей тысяч? .
Байтов
print ('{:,.0f}'.format(os.path.getsize(filepath))+" B")
Килобиты
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<7))+" kb")
Килобайт
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<10))+" KB")
Мегабит
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<17))+" mb")
Мегабайт
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<20))+" MB")
Гигабит
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<27))+" gb")
Гигабайт
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<30))+" GB")
Терабайт
print ('{:,.0f}'.format(os.path.getsize(filepath)/float(1<<40))+" TB")
Очевидно, они предполагают, что вы примерно знаете, с каким размером вы собираетесь иметь дело с самого начала, который в моем случае (видеоредактор на South West London TV) составляет МБ, а иногда и ГБ для видеоклипов.
ОБНОВЛЕНИЕ С ИСПОЛЬЗОВАНИЕМ PATHLIB
В ответ на комментарий Хильди, вот мое предложение для компактной пары функций (сохраняя элементы «атомарными», а не объединяя их), используя только стандартную библиотеку Python:
from pathlib import Path
def get_size(path = Path('.')):
""" Gets file size, or total directory size """
if path.is_file():
size = path.stat().st_size
elif path.is_dir():
size = sum(file.stat().st_size for file in path.glob('*.*'))
return size
def format_size(path, unit="MB"):
""" Converts integers to common size units used in computing """
bit_shift = {"B": 0,
"kb": 7,
"KB": 10,
"mb": 17,
"MB": 20,
"gb": 27,
"GB": 30,
"TB": 40,}
return "{:,.0f}".format(get_size(path) / float(1 << bit_shift[unit])) + " " + unit
>>> format_size("d:\\media\\bags of fun.avi")
'38 MB'
>>> format_size("d:\\media\\bags of fun.avi","KB")
'38,763 KB'
>>> format_size("d:\\media\\bags of fun.avi","kb")
'310,104 kb'