Нижче наведено швидкий і відносно легкий для читання спосіб друку розмірів файлів в одному рядку коду, якщо ви вже знаєте, чого хочете. Ці однокласні вкладиші поєднують чудову відповідь @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) - МБ, а іноді і ГБ для відеокліпів.
ОНОВЛЕННЯ ЗА ВИКОРИСТАННЯМ 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'