25 lines
745 B
Python
25 lines
745 B
Python
from math import floor, log
|
|
|
|
bytes_in_unit = 1024 # Kibibyte
|
|
units = ("B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB", "HiB")
|
|
# bytes_in_unit = 1000 # Kilobyte
|
|
# units = ("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB", "HB")
|
|
|
|
|
|
def convert_bytes(c_bytes: int, unit: str = None) -> (float, str):
|
|
if c_bytes == 0:
|
|
return 0, units[0] if unit is None else unit
|
|
|
|
if unit is None:
|
|
index = int(floor(log(c_bytes, bytes_in_unit)))
|
|
else:
|
|
index = units.index(unit)
|
|
|
|
result = round(c_bytes / pow(bytes_in_unit, index), 2)
|
|
return result, units[index]
|
|
|
|
|
|
def bytes_to_string(c_bytes: int, unit: str = None) -> str:
|
|
n_bytes, unit = convert_bytes(c_bytes, unit)
|
|
return f"{n_bytes} {unit}"
|