См. Ниже быстрый и относительно простой для чтения способ печати размеров файлов в одной строке кода, если вы уже знаете, что хотите.Эти однострочники объединяют отличный ответ @ 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) имеет размер MB, а иногда и GB для видеоклипов.
ОБНОВЛЕНИЕ С ИСПОЛЬЗОВАНИЕМ 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
# Tests and test results
>>> get_size("d:\\media\\bags of fun.avi")
'38 MB'
>>> get_size("d:\\media\\bags of fun.avi","KB")
'38,763 KB'
>>> get_size("d:\\media\\bags of fun.avi","kb")
'310,104 kb'