python硬盘占用_python学习之计算目录的磁盘使用率

本文介绍了如何使用Python的os.statvfs()函数计算目录的磁盘使用情况,并与Linux的df命令进行了对比。通过解析os.statvfs()的输出字段,可以计算总容量、使用量、有效容量和使用率。示例代码展示了对根目录和'/var/lib/docker'目录的分析,结果显示两者相同,因为它们位于同一分区。
摘要由CSDN通过智能技术生成

通过os.statvfs计算某目录的使用率等

基础知识

通过使用os.statvfs()可以计算出指定目录的使用情况,下面将其与Linux下的df命令做一个对比

先看一下os.statvfs调用后的输出结果:

>>> import os

>>> os.statvfs('/')

posix.statvfs_result(f_bsize=4096, f_frsize=4096, f_blocks=25403486, f_bfree=17181744, f_bavail=15885552, f_files=6463488, f_ffree=6056870, f_favail=6056870, f_flag=4096, f_namemax=255)

下面将对输出的这些字段做解释:

字段值

字段含义

f_bsize

文件系统快大小

f_frsize

分栈大小

f_blocks

文件系统数据块总数

f_bfree

可用块数

f_bavail

非超级用户可获取的块数

f_files

文件节点总数

f_ffree

可用文件节点数

f_favail

非超级用户可用文件节点数

f_flag

挂载标记

f_namemax

最大文件长度

在有了这些数据的情况下,就可以进一步计算出当前目录下的硬盘占用情况等

计算方法如下(中括号内表示的是对应于df输出中的哪一列):

总容量(KB) = f_bsize * f_blocks / 1024 【1k-blocks】

使用量(KB) = f_bsize * (f_blocks - f_bfree) / 1024 【Used】

有效容量(KB) = f_bsize * f_bavail / 1024 【Available】

使用量(%) = 使用量 / (使用量+有效容量) * 100 【Use%】

案例

使用df查看根目录的磁盘使用情况:

df

文件系统 1K-块 已用 可用 已用% 挂载点

udev 3917616 0 3917616 0% /dev

tmpfs 788828 9724 779104 2% /run

/dev/sda8 101613944 32908924 63520252 35% /

tmpfs 3944128 107660 3836468 3% /dev/shm

tmpfs 5120 4 5116 1% /run/lock

tmpfs 3944128 0 3944128 0% /sys/fs/cgroup

/dev/loop0 89088 89088 0 100% /snap/core/4917

/dev/loop3 296064 296064 0 100% /snap/pycharm-professional/78

/dev/loop2 89088 89088 0 100% /snap/core/5145

/dev/loop1 301184 301184 0 100% /snap/pycharm-professional/80

/dev/sda7 463724 132903 302360 31% /boot

cgmfs 100 0 100 0% /run/cgmanager/fs

tmpfs 788828 88 788740 1% /run/user/1000

unionfs-fuse 101613944 32908924 63520252 35% /home/yangsijie/.QQ.unionfs

unionfs-fuse 101613944 32908924 63520252 35% /home/yangsijie/.TIM.unionfs

使用os.statvfs分析根目录的磁盘使用情况:

import os

def disk_info(path):

vfs = os.statvfs(path)

total = vfs.f_bsize * vfs.f_blocks / 1024

used = vfs.f_bsize * (vfs.f_blocks - vfs.f_bfree) / 1024

avail = vfs.f_bsize * vfs.f_bavail / 1024

used_percent = round(float(used) / float(used + avail) * 100, 2)

print ('总容量为:%d' % total)

print ('使用量为:%d' % used)

print ('有效容量为:%d' % avail)

print ('使用率为:%f' % used_percent)

disk_info('/')

执行结果为:

总容量为: 101613944

使用量为: 32909872

有效容量为: 63519304

使用率为: 34.130000

从结果中可以看出,与df中的指定字段的内容是基本一致的,没有太大的出入

如果想要查看一个目录的使用情况呢?比如说/var/lib/docker:

disk_info('/var/lib/docker')

执行结果为:

总容量为: 101613944

使用量为: 32910220

有效容量为: 63518956

使用率为: 34.130000

会发现与之前的/目录情况一致,为什么会有这种情况?

其实细细看一下df的输出就可以发现,/var/lib/docker目录下并没有单独挂载一个分区,也就是说/和/var/lib/docker是共享分区的,所以他们显示的磁盘信息是相同的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值