gpt4 book ai didi

python - 舍入系统 RAM 和 HDD 字节,向上到最接近的千兆字节。 Python

转载 作者:太空宇宙 更新时间:2023-11-04 01:07:32 25 4
gpt4 key购买 nike

我正在收集当前机器的系统信息。此信息的一部分是 RAM 和 HDD 容量。问题是所收集的容量是以字节而不是 GB 为单位测量的。

简而言之,如何将内部规范的显示转换为类似于您从消费者/商业角度看到的内容?

1000GB HDD 或 8GB RAM,而不是确切的可用字节数。特别是由于制造商预留了不同数量的恢复扇区,RAM 可用于集成图形和 1000 与 1024 二进制差异等......这是我当前代码的示例:

import os
import wmi #import native powershell functionality
import math

c = wmi.WMI()
SYSINFO = c.Win32_ComputerSystem()[0] # Manufacturer/Model/Spec blob

RAMTOTAL = int(SYSINFO.TotalPhysicalMemory) # Gathers only the RAM capacity in bytes.
RAMROUNDED = math.ceil(RAMTOTAL / 2000000000.) * 2.000000000 # attempts to round bytes to nearest, even, GB.
HDDTOTAL = int(HDDINFO.size) # Gathers only the HDD capacity in bytes.
HDDROUNDED = math.ceil(HDDTOTAL / 2000000000.) * 2.000000000 # attempts to round bytes to nearest, even, GB.
HDDPRNT = "HDD: " + str(HDDROUNDED) + "GB"
RAMPRNT = "RAM: " + str(RAMROUNDED) + "GB"
print(HDDPRNT)
print(RAMPRNT)


感兴趣的区域是线8-11我将向上四舍五入到最接近的偶数,因为由于前面提到的原因,RAM/HDD 的内部大小总是低于宣传的。 StackOverflow 的帖子让我得到了这个方法,它是最准确的,适用于大多数机器,但它仍然是硬编码的。这意味着 HDD 只能精确舍入数百 GB 或数千 GB,而不是两者。此外,RAM 并非 100% 准确。

这里有几个我想到的解决方法,它们会产生我正在寻找的结果:

  • RAMTOTAL 添加额外的命令可能可用也可能不可用。允许 GB 输出而不是 KB。然而。我希望它与 WMI 分开导入而不是直接的 native Windows 代码。

  • 找出一种更静态的舍入方法。即:if HDDTOTAL > 1TB四舍五入到小数点X . else HDDTOTAL < 1TB使用不同的舍入方法。

最佳答案

我认为您可以编写一个简单的函数来解决它。如果 kB 中的数字明显更小或更大,我添加了不同后缀的可能性(它的灵感来自一本书 Dive Into Python 3 中非常相似的示例)。它可能看起来像这样:

def round(x):
a = 0
while x > 1000:
suffixes = ('kB','MB','GB','TB')
a += 1 #This will go up the suffixes tuple with each division
x = x /1000
return math.ceil(x), suffixes[a]

这个函数的结果可能是这样的:

>>> print(round(19276246))
(20, 'GB')
>>> print(round(135565666656))
(136, 'TB')
>>> print(round(1355))
(2, 'MB')

你可以像这样在你的代码中实现它:

import os
import wmi #import native powershell functionality
import math

def round(x):
a = 0
while x > 1000:
suffixes = ('kB','MB','GB','TB')
a += 1 #This will go up the suffixes tuple for each division
x = x /1000
return math.ceil(x), suffixes[a]

.
.
.

RAMROUNDED = round(RAMTOTAL) #attempts to round bytes to nearest, even, GB.
HDDTOTAL = int(HDDINFO.size) # Gathers only the HDD capacity in bytes.
HDDROUNDED = round(HDDTOTAL) #attempts to round bytes to nearest, even, GB.
HDDPRNT = "HDD: " + str(HDDROUNDED[0]) + HDDROUNDED[1]
RAMPRNT = "RAM: " + str(RAMROUNDED[0]) + RAMROUNDED[1]
print(HDDPRNT)
print(RAMPRNT)

关于python - 舍入系统 RAM 和 HDD 字节,向上到最接近的千兆字节。 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29627713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com