Как преобразовать размер файла, заданного в байтах, в человекочитаемый формат?
Размер файла — это целое число байт. Но в последнее время файлы достигают таких размеров, что учитывать размер в байтах, мягко говоря, не удобно. Поэтому, все программы и системы показывают этот размер в приведенных величнах — килобайтах, мегабайтах, гигабайтах и т.д.
Вам требуется для тренировки написать функцию human_read_format(size), которая преобразует размер файла, заданный в байтах, в ЧеловекоЧитаемый Формат (ЧЧФ).
В функцию поступает параметр size — размер файла в байтах — целое неотрицательное число.
Функция должна вернуть представление размера файла в приведенных величинах — байтах (Б), килобайтах (КБ), мегабайтах (МБ) и гигабайтах (ГБ).
Учтите, что 1КБ = 1024Б, 1МБ = 1024КБ, а 1ГБ = 1024МБ.
Размер файла указывается только в старших единицах измерения, округленных до целого функцией round, например «11МБ» вместо «11МБ 130КБ».
Переход через единицы осуществляется через 1023: например, 1023КБ — это еще килобайты, а 1024КБ — это уже 1МБ.
Вот мой код:
def human_read_format(size):
if size < 1024:
return size, "Б"
elif size >= 1024:
return size, "КБ"
elif size >= 1048576:
return size, "МБ"
print(human_read_format(15000))
Не понимаю, как делать дальше и куда поставить функцию round.
Например, при вводе print(human_read_format(15000)) должно выводить 15КБ, а у меня выводит 15000 КБ.
Ответы (1 шт):
Попробуйте так:
import math
def human_read_format(size):
pwr = math.floor(math.log(size, 1024))
suff = ["Б", "КБ", "МБ", "ГБ", "ТБ", "ПБ", "ЭБ", "ЗБ", "ЙБ"]
if size > 1024 ** (len(suff) - 1):
return "не знаю как назвать такое число :)"
return f"{size / 1024 ** pwr:.0f}{suff[pwr]}"