linux查看python文件大小_python计算文件夹大小(linux du命令 简化版)

C盘又满了,怎么办?用了一些垃圾清理软件(或者bat脚本),但是还是不理想,那么具体哪些文件夹下面有巨大的文件呢?windows并不能通过详细信息看到每个文件夹的大小(PS:这里所谓的文件夹的大小是指文件夹下面所有文件的大小之和,包括子文件夹的大小,下同),道理也很简单,计算文件夹大小是比较费时的工作。当然,也可以通过属性查看文件夹大小,但是当一个文件夹下面又有及半个子文件夹的时候,怎么知道哪些比较大的,这个时候不禁想起了linux下面的du命令。

du(disk usage)是查看磁盘使用情况非常有用的一个工具(另外一个是df),具体的使用文档可以参见链接。而本人最常使用的参数是这样的:

du . -h -d 1

上述命令输出当前文件夹(.)下面 第一层(-d 1)子文件夹的大小,以human readable(-h)的形式展现, 下面是实际例子:

0818b9ca8b590ca3270a3433284dd417.png

那windows下面并没有这样一个简单的命令(或者是我不知道?),不过无所谓,用python应该比较简单:

0818b9ca8b590ca3270a3433284dd417.png

1 # -*- coding: utf-8 -*- 2 import os, sys 3  4  5 def get_path_depth(root, dirpath): 6     return dirpath.count(os.path.sep) - root.count(os.path.sep) 7  8 def human_readable(plain_size): 9     plain_size = float(plain_size)10     if plain_size <= 1024:11         return str( round(plain_size, 2)) + 'B'12     if plain_size <= 1024 * 1024:13         return str( round(plain_size / 1024, 2)) + 'K'14     if plain_size <= 1024 * 1024 * 1024:15         return str( round(plain_size / 1024 / 1024, 2)) + 'M'16     if plain_size <= 1024 * 1024 * 1024 *1024:17         return str( round(plain_size / 1024 / 1024 / 1024, 2)) + 'G'18 19 def main(root, max_depth, min_size_byte):20     total_size = 021     dir_size = {}22     for dirpath, dirnames, filenames in os.walk(root):23         cur_depth = get_path_depth(root, dirpath)24         25         if cur_depth <= max_depth:26             assert dirpath not in dir_size27             dir_size[dirpath] = 028 29         for filename in filenames:30             fullpath = os.path.join(dirpath, filename)31             filesize= os.path.getsize(fullpath)32 33             total_size += filesize34             for dirname in dir_size:35                 if dirpath == dirname or dirpath.startswith(dirname + os.path.sep):36                     dir_size[dirname] += filesize37 38     root_size = len(root)39     for dirname, plain_size in sorted(dir_size.iteritems(), key = lambda d : d[1], reverse = True):40         if plain_size = 3 else 051     min_size_byte = int(sys.argv[3]) if len(sys.argv) >= 4 else 052     main(root, max_depth, min_size_byte)

0818b9ca8b590ca3270a3433284dd417.png

三个参数,第一个是文件夹(path);第二个是显示子文件夹的层数(max_depth, 默认为0); 第三个字数限制文件夹带下(min_size_byte),即size小于这个值得文件夹就不显示了,默认值为1。

上述代码使用了两个比较关键的函数:os.walk, 遍历路径下的所有文件夹和文件,注意该函数本身就会递归显示子文件夹的内容;第二个函数是os.path.getsize,获取一个文件的大小。

windows下试一试:

0818b9ca8b590ca3270a3433284dd417.png

Linux下面试一试:

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值