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)
我正在寻找一个函数,给定人类可读的字符串,它将以字节为单位返回该大小(最小,最大)的边界,在小数点后占 1 个数字。例如:
human_readable_to_range('1 KiB') => 1024, 1075
1 KiB 在 1075 处停止,因为 1076 是 1.1 KiB
human_readable_to_range('1.3 KiB') => 1281, 1382
human_readable_to_range('9.7 MiB') => 10118759, 10223615
我尝试以这种方式解决它:
def human_readable_to_range(size):
MULTIPLIERS = {
'KiB': 2**10,
'MiB': 2**20
}
number, unit = size.split(' ')
multiplier = MULTIPLIERS[unit]
rough_value = float(number) * multiplier
min_ = rough_value - multiplier * 0.5
max_ = rough_value + multiplier * 0.5
但是这个解决方案只给出了近似值
解决方案
您可以使用二分搜索:从近似值开始,根据乘数将其设为范围,然后根据值如何转换为人类可读形式来搜索该范围。
推荐阅读
- php - 传递参数以导入
- javascript - 如何在一段时间内显示一个DIV?Javascript
- c# - 将日期格式放在 ASP.NET 上
- python - 带有 Docker 错误“SessionStore”对象的 Django 没有属性“_session_cache”
- docker - 从 Jenkins 管道中的 docker 代理运行时,Ansible 失败
- google-apps-script - 谷歌表格脚本基于单元格值导入数据而不是重复信息
- flutter - Dart/Flutter 中 Money 的数据类型
- python - 如何在训练张量流期间设置层权重
- javascript - vue动态表单
- php - 使用 MySql 和 PHP 从具有多行的列中提取两个值