我正在尝试将总物理内存转换为贴值,即128gb,64gb ..等。
如果我从我的服务器获取总ram的值,例如16826298368,并运行此代码,我得到并预期输出为16gb。哪个好。但随着记忆值的增加,它开始漂移 示例:134931955712生成126GB,预计128GB。 示例:67519483904产生63GB,预计64GB。
所以我的问题是,当价值发生变化时,我如何修改以获得预期的输出?根据OS,存储器值由几个不同的代码位提供。例如,我们在Solaris上使用psutil。 psutil.virtual_memory()。总
def transform_memory(data):
for x in ["bytes", " KB", " MB", " GB"]:
if data < 1024.0:
return "%3.1f%s" % (math.ceil(data), x)
data /= 1024.0
return "%3.1f%s" % (data, " TB")
答案 0 :(得分:0)
试试这个:
import psutil
def bytes2human(n):
# http://code.activestate.com/recipes/578019
# >>> bytes2human(10000)
# '9.8K'
# >>> bytes2human(100001221)
# '95.4M'
symbols = ('K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y')
prefix = {}
for i, s in enumerate(symbols):
prefix[s] = 1 << (i + 1) * 10
for s in reversed(symbols):
if n >= prefix[s]:
value = float(n) / prefix[s]
return '%.1f%s' % (value, s)
return "%sB" % n
total = psutil.disk_usage('/').total
print(total)
print(bytes2human(total))
...打印:
100399730688
93.5G
由于这是一个常见的用例,我只是将上面的内容添加到psutil doc: http://psutil.readthedocs.io/en/latest/#bytes-conversion