C盘又满了,怎么办?用了一些垃圾清理软件(或者bat脚本),但是还是不理想,那么具体哪些文件夹下面有巨大的文件呢?windows并不能通过详细信息看到每个文件夹的大小(PS:这里所谓的文件夹的大小是指文件夹下面所有文件的大小之和,包括子文件夹的大小,下同),道理也很简单,计算文件夹大小是比较费时的工作。当然,也可以通过属性查看文件夹大小,但是当一个文件夹下面又有及半个子文件夹的时候,怎么知道哪些比较大的,这个时候不禁想起了linux下面的du命令。
du(disk usage)是查看磁盘使用情况非常有用的一个工具(另外一个是df),具体的使用文档可以参见链接。而本人最常使用的参数是这样的:
du . -h -d 1
上述命令输出当前文件夹(.)下面 第一层(-d 1)子文件夹的大小,以human readable(-h)的形式展现, 下面是实际例子:
那windows下面并没有这样一个简单的命令(或者是我不知道?),不过无所谓,用python应该比较简单:
1 #-*- coding: utf-8 -*-
2 importos, sys3
4
5 defget_path_depth(root, dirpath):6 return dirpath.count(os.path.sep) -root.count(os.path.sep)7
8 defhuman_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 defmain(root, max_depth, min_size_byte):20 total_size =021 dir_size ={}22 for dirpath, dirnames, filenames inos.walk(root):23 cur_depth =get_path_depth(root, dirpath)24
25 if cur_depth <=max_depth:26 assert dirpath not indir_size27 dir_size[dirpath] =028
29 for filename infilenames:30 fullpath =os.path.join(dirpath, filename)31 filesize=os.path.getsize(fullpath)32
33 total_size +=filesize34 for dirname indir_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
<