2024-05-15 02:29:29 发布
网友
web上有各种代码片段,它们将提供一个函数,用于从字节大小返回人类可读的大小:
>>> human_readable(2048) '2 kilobytes' >>>
但是是否有一个Python库提供了这个功能?
通过简单的实现解决上述“任务太小,不需要库”问题:
def sizeof_fmt(num, suffix='B'): for unit in ['','Ki','Mi','Gi','Ti','Pi','Ei','Zi']: if abs(num) < 1024.0: return "%3.1f%s%s" % (num, unit, suffix) num /= 1024.0 return "%.1f%s%s" % (num, 'Yi', suffix)
支持:
示例:
>>> sizeof_fmt(168963795964) '157.4GiB'
通过Fred Cirera
一个拥有所有功能的库是^{}。humanize.naturalsize()似乎做了你想要的一切。
humanize.naturalsize()
这是我的版本。它不使用for循环。它具有恒定的复杂性O(1),理论上比这里使用for循环的答案更有效。
from math import log unit_list = zip(['bytes', 'kB', 'MB', 'GB', 'TB', 'PB'], [0, 0, 1, 2, 2, 2]) def sizeof_fmt(num): """Human friendly file size""" if num > 1: exponent = min(int(log(num, 1024)), len(unit_list) - 1) quotient = float(num) / 1024**exponent unit, num_decimals = unit_list[exponent] format_string = '{:.%sf} {}' % (num_decimals) return format_string.format(quotient, unit) if num == 0: return '0 bytes' if num == 1: return '1 byte'
为了更清楚地说明发生了什么,我们可以省略字符串格式的代码。以下是实际完成工作的几行:
exponent = int(log(num, 1024)) quotient = num / 1024**exponent unit_list[exponent]
通过简单的实现解决上述“任务太小,不需要库”问题:
支持:
示例:
通过Fred Cirera
一个拥有所有功能的库是^{} 。
humanize.naturalsize()
似乎做了你想要的一切。这是我的版本。它不使用for循环。它具有恒定的复杂性O(1),理论上比这里使用for循环的答案更有效。
为了更清楚地说明发生了什么,我们可以省略字符串格式的代码。以下是实际完成工作的几行:
相关问题 更多 >
编程相关推荐