Source code for lump.humanreadable

from functools import partial

_prefixes = 'kMGTPEZY'


[docs]def format_metric(num, suffix=None, base=None, midfix=None, prefixes=None, precision=None): """ Format a number using prefixes according to base (by default using metric prefixes, and a suffix of 'B', representing the unit of digital information) :return: Formatted number :rtype: str """ if suffix is None: suffix = 'B' if base is None: base = 1000 if midfix is None: midfix = '' if prefixes is None: prefixes = _prefixes if precision is None: precision = 2 format_string = '%%.%df%%s%%s%%s' % (precision,) if abs(num) < base: return format_string % (num, '', '', suffix) prev_unit = '' for unit in prefixes: if abs(num) < base: return format_string % (num, prev_unit, midfix, suffix) num /= base prev_unit = unit return format_string % (num, unit, midfix, suffix)
format_binary = partial(format_metric, midfix='i', base=1024, prefixes=_prefixes.upper())