From f9f947fab6570e8a755e1a6b553385e56556db09 Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Tue, 29 Jun 2021 22:40:40 -0600 Subject: [PATCH] Update wk.std.bytes_to_string() --- scripts/wk/std.py | 43 ++++++++++++++----------------------------- 1 file changed, 14 insertions(+), 29 deletions(-) diff --git a/scripts/wk/std.py b/scripts/wk/std.py index eb75154b..919c73a4 100644 --- a/scripts/wk/std.py +++ b/scripts/wk/std.py @@ -701,40 +701,25 @@ def bytes_to_string(size, decimals=0, use_binary=True): decimals, use_binary, ) + scale = 1024 if use_binary else 1000 size = float(size) - abs_size = abs(size) - - # Set scale - scale = 1000 - suffix = 'B' - if use_binary: - scale = 1024 - suffix = 'iB' + suffix = ' ' if use_binary else ' ' + units = list('KMGTPEZY') # Convert to sensible units - if abs_size >= scale ** 5: - size /= scale ** 5 - units = 'P' + suffix - elif abs_size >= scale ** 4: - size /= scale ** 4 - units = 'T' + suffix - elif abs_size >= scale ** 3: - size /= scale ** 3 - units = 'G' + suffix - elif abs_size >= scale ** 2: - size /= scale ** 2 - units = 'M' + suffix - elif abs_size >= scale ** 1: - size /= scale ** 1 - units = 'K' + suffix - else: - size /= scale ** 0 - units = f' {" " if use_binary else ""}B' - size = f'{size:0.{decimals}f} {units}' + while units: + if abs(size) < scale: + break + size /= scale + suffix = units.pop(0) + size_str = ( + f'{size:0.{decimals}f} {suffix}' + f'{"iB" if use_binary and suffix.strip() else "B"}' + ) # Done - LOG.debug('string: %s', size) - return size + LOG.debug('string: %s', size_str) + return size_str def choice(choices, prompt='答えろ!'):