获取Python中的硬盘大小

时间:2018-02-22 14:12:59

标签: python hard-drive

我正在尝试使用Python获取硬盘大小和可用空间(我使用带有macOS的Python 2.7)。

我正在尝试使用os.statvfs('/'),尤其是使用以下代码。 我正在做的事情是否正确?我应该使用变量giga的哪个定义?

import os

def get_machine_storage():
    result=os.statvfs('/')
    block_size=result.f_frsize
    total_blocks=result.f_blocks
    free_blocks=result.f_bfree
    # giga=1024*1024*1024
    giga=1000*1000*1000
    total_size=total_blocks*block_size/giga
    free_size=free_blocks*block_size/giga
    print('total_size = %s' % total_size)
    print('free_size = %s' % free_size)

get_machine_storage()

编辑: 在Python 3中不推荐使用statvfs,您知道其他选择吗?

5 个答案:

答案 0 :(得分:17)

Python为您提供shutil模块,该模块具有disk_usage功能,返回一个命名元组,其中包含硬盘中的总空间,已用空间和可用空间。

您可以按如下方式调用该函数,并获取有关磁盘空间的所有信息:

import shutil

total, used, free = shutil.disk_usage("\\")

print("Total: %d GB" % (total // (2**30)))
print("Used: %d GB" % (used // (2**30)))
print("Free: %d GB" % (free // (2**30)))

输出:

Total: 931 GB
Used: 29 GB
Free: 902 GB

答案 1 :(得分:5)

https://pypi.python.org/pypi/psutil

for(i in 1:length(test)){
  if(length(test[[i]]) < 20){
    test[[i]] <- c(test[[i]], rep(NA, 20 - length(test[[i]])))
  }
}

答案 2 :(得分:1)

当您不知道如何处理函数的结果时,打印出类型会有所帮助。

print type(os.statvfs('/'))返回<type 'posix.statvfs_result'>

这意味着它不是像string或int这样的内置类实例。

您可以使用dir(instance)

检查您可以对该实例执行的操作

print dir(os.statvfs('/'))打印所有属性,函数,变量......

['__add__', '__class__', '__contains__', '__delattr__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__',
'__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__',
'__lt__', '__mul__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', 'f_bavail', 'f_bfree', 'f_blocks',
'f_bsize', 'f_favail', 'f_ffree', 'f_files', 'f_flag', 'f_frsize',
'f_namemax', 'n_fields', 'n_sequence_fields', 'n_unnamed_fields']

通过访问其中一个变量,例如os.statvfs('/').f_ffree,您可以提取整数。

使用print type(os.statvfs('/').f_ffree)仔细检查, 它会打印<type 'int'>

答案 3 :(得分:0)

该代码是正确的,但是您使用了错误的字段,这可能会在其他系统上给您错误的结果。正确的方法是:

>>> os.system('df -k /')
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root       14846608 3247272  10945876  23% /

>>> disk = os.statvfs('/')
>>> (disk.f_bavail * disk.f_frsize) / 1024
10945876L

答案 4 :(得分:0)

根据此处的答案显示磁盘大小的单行解决方案(以 GiB 为单位):

>>> import shutil

>>> [f"{y}: {x//(2**30)} GiB" for x, y in zip(shutil.disk_usage('/'), shutil.disk_usage('/')._fields)]
['total: 228 GiB', 'used: 14 GiB', 'free: 35 GiB']