能否修改format参数使Python humanize.naturalsize输出1M、1.01M格式?
解决humanize.naturalsize()去除小数末尾零的问题
直接修改format变量的格式字符串无法实现需求,因为%.2f这类固定格式符会强制保留指定位数的小数,没办法自动去除末尾的零。不过可以通过自定义格式化函数来达成目标,具体实现如下:
import humanize def custom_format(num): # 先格式化为两位小数,再去除末尾的零和多余的小数点 formatted = "{0:.2f}".format(num) return formatted.rstrip('0').rstrip('.') if '.' in formatted else formatted raw1 = 1_048_576 raw2 = 1_058_576 print(humanize.naturalsize(raw1, format=custom_format, gnu=True)) print(humanize.naturalsize(raw2, format=custom_format, gnu=True))
运行代码后,输出结果为:
1M
1.01M
原理说明
- 自定义的
custom_format函数先将数值格式化为两位小数的字符串; - 利用
rstrip('0')移除末尾的零,再通过rstrip('.')去掉零被移除后可能残留的小数点; - 将这个函数传递给
naturalsize的format参数,就能实现自动去除小数末尾零的效果。
内容的提问来源于stack exchange,提问作者Damn Vegetables
相关产品推荐
相关产品推荐

