diff --git a/humansize.py b/humansize.py new file mode 100644 index 0000000..77db8ff --- /dev/null +++ b/humansize.py @@ -0,0 +1,36 @@ +from optparse import OptionParser + +SUFFIXES = ('KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB') +MULTIPLES = {True: 1024, False: 1000} + +def human_size(size, use_binary_multiples=True): + """Convert a file size to human-readable form. + + Keyword arguments: + size -- file size in bytes + use_binary_multiples -- if False, use multiples of 1000 + if True, use multiples of 1024 (default=True) + + Returns: string + + """ + multiple = MULTIPLES[use_binary_multiples] + for suffix in SUFFIXES: + size /= multiple + if size < multiple: + return "{0:.1f} {1}".format(size, suffix) + return "Too large to contemplate!" + +if __name__ == "__main__": + parser = OptionParser() + parser.add_option("-d", "--decimal", + action="store_false", + dest="binary_multiples", + default=True, + help="use multiples of 1000 instead of 1024") + (options, args) = parser.parse_args() + if args: + print(human_size(int(args[0]), options.binary_multiples)) + else: + parser.print_help() +