python计算文件夹大小(linux du命令 简化版)
C盘又满了,怎么办?用了一些垃圾清理软件(或者bat脚本),但是还是不理想,那么具体哪些文件夹下面有巨大的文件呢?windows并不能通过详细信息看到每个文件夹的大小(PS:这里所谓的文件夹的大小是指文件夹下面所有文件的大小之和,包括子文件夹的大小,下同),道理也很简单,计算文件夹大小是比较费时的工作。当然,也可以通过属性查看文件夹大小,但是当一个文件夹下面又有及半个子文件夹的时候,怎么知道哪些比较大的,这个时候不禁想起了linux下面的du命令。
du(disk usage)是查看磁盘使用情况非常有用的一个工具(另外一个是df),具体的使用文档可以参见链接。而本人最常使用的参数是这样的:
du . -h -d 1
上述命令输出当前文件夹(.)下面 第一层(-d 1)子文件夹的大小,以human readable(-h)的形式展现, 下面是实际例子:
那windows下面并没有这样一个简单的命令(或者是我不知道?),不过无所谓,用python应该比较简单:
- # -*- coding: utf-8 -*-
- import os, sys
- def get_path_depth(root, dirpath):
- return dirpath.count(os.path.sep) - root.count(os.path.sep)
- def human_readable(plain_size):
- plain_size = float(plain_size)
- if plain_size <= 1024:
- return str( round(plain_size, 2)) + 'B'
- if plain_size <= 1024 * 1024:
- return str( round(plain_size / 1024, 2)) + 'K'
- if plain_size <= 1024 * 1024 * 1024:
- return str( round(plain_size / 1024 / 1024, 2)) + 'M'
- if plain_size <= 1024 * 1024 * 1024 *1024:
- return str( round(plain_size / 1024 / 1024 / 1024, 2)) + 'G'
- def main(root, max_depth, min_size_byte):
- total_size = 0
- dir_size = {}
- for dirpath, dirnames, filenames in os.walk(root):
- cur_depth = get_path_depth(root, dirpath)
- if cur_depth <= max_depth:
- assert dirpath not in dir_size
- dir_size[dirpath] = 0
- for filename in filenames:
- fullpath = os.path.join(dirpath, filename)
- filesize= os.path.getsize(fullpath)
- total_size += filesize
- for dirname in dir_size:
- if dirpath == dirname or dirpath.startswith(dirname + os.path.sep):
- dir_size[dirname] += filesize
- root_size = len(root)
- for dirname, plain_size in sorted(dir_size.iteritems(), key = lambda d : d[1], reverse = True):
- if plain_size < min_size_byte:
- break
- print human_readable(plain_size), '\t.', dirname[root_size: ]
- if __name__ == '__main__':
- if len(sys.argv) <= 1:
- assert False, 'usage show_dir_size path max_depth(with default 0) min_size_byte(with default 1)'
- root = sys.argv[1]
- if root.endswith(os.path.sep):
- root = root[: -1]
- max_depth = int(sys.argv[2]) if len(sys.argv) >= 3 else 0
- min_size_byte = int(sys.argv[3]) if len(sys.argv) >= 4 else 0
- main(root, max_depth, min_size_byte)
三个参数,第一个是文件夹(path);第二个是显示子文件夹的层数(max_depth, 默认为0); 第三个字数限制文件夹带下(min_size_byte),即size小于这个值得文件夹就不显示了,默认值为1。
上述代码使用了两个比较关键的函数:os.walk, 遍历路径下的所有文件夹和文件,注意该函数本身就会递归显示子文件夹的内容;第二个函数是os.path.getsize,获取一个文件的大小。
windows下试一试:
Linux下面试一试:
references:
python计算文件夹大小(linux du命令 简化版)的更多相关文章
- Linux下查看文件和文件夹大小 df,du命令
转自 http://www.cnblogs.com/benio/archive/2010/10/13/1849946.html df可以查看一级文件夹大小.使用比例.档案系统及其挂入点,但对文件却无能 ...
- python计算文件夹大小——os.walk
下面提供一种利用os.walk()快捷的计算指定文件夹大小的方法 话不多说,直接上代码 简略版: import os def get_file_size(file_path, size=0): for ...
- Python_计算文件夹大小
计算文件夹大小 os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.path.join(path1[, path2[, ...]]) 将 ...
- python 计算文件夹里所有内容的大小总和
计算文件夹里所有内容的大小总和 递归方法 '''计算文件夹的大小''' import os def dir_file_size(path): if os.path.isdir(path): file_ ...
- python 获取文件夹大小
__author__ = 'bruce' import os from os.path import join,getsize def getdirsize(dir): size=0l for (ro ...
- Linux下查看磁盘剩余空间和文件夹大小
1. du -sh 查看当前文件夹大小 2. du -sh * | sort -n 列出当前文件夹下的所有文件夹及其大小,并按照文件夹大小排序 du - sh * //查看当前文件夹下所有文件的大小 ...
- Linux查看一个文件夹大小
1.Linux查看一个文件夹大小: du -sh /home/yangkun [yangkun@sg1 bin]$ du -sh /home/yangkun/ 164M /home/yangkun/ ...
- Linux C++获取文件夹大小
项目中要计算指定文件夹的大小.百度查到这篇文章,https://my.oschina.net/Tsybius2014/blog/330628方法可行,运行正确. 拿到我们的项目中,却遇到一些问题:程序 ...
- NSFileManager计算文件/文件夹大小
在一些软件中,一般都会给用户展现当前APP的内存,同时用户可以根据自己的需要来清除缓存的内容.一般而言,文件夹是没有大小这个属性的,所以需要遍历文件夹的内容来计算文件夹的大小,下面用NSFileMan ...
随机推荐
- java_XML_STAX
xml文件 <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book ca ...
- seq语句随笔
1.UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果. 2.UNION ALL只是简单的将两个结果合并后就返回.这样,如果返回的两个结 ...
- 初识 BFC、 IFC、GFC、FFC
首先本文中介绍的 BFC. IFC.GFC.FFC 均为 CSS 中常见问题的解读,如没兴趣,可以绕道了. 然后在介绍这么多的 *FC 之前,我们得了解 一下 Box 和 Formatting Con ...
- 告诉你 IOS9.0 之后的Bitcode到底是什么!!
用Xcode 7 beta 3在真机(iOS 8.3)上运行一下工程,结果发现工程编译不过.看了下问题,报的是以下错误: ld: ‘/Users/**/Framework/SDKs/PolymerPa ...
- c#导入excel 绑定数据 repeat为例子
先读取Excel文件并存到dataset public DataSet ExcelToDataTable(string filename, string strsheetname) { try { / ...
- MASM32快速起步
MASM32是一个免费的软件程序,让您编辑Microsoft宏汇编程序(MASM)代码从一个基本的文本界面.它强调MASM代码各部分以不同的颜色,使其更容易扫描和检测错误.它提供了一个简单的布局程序员 ...
- 前端学PHP之正则表达式基础语法
前面的话 正则表达式是用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分割.匹配.查找及替换操作.在PHP中,正则表达式一般是由正规字符和一些特殊字符(类似于通配符)联合构成的一个文本 ...
- 从 http 升级到 https 过程中遇到的一些问题
Apple 2017年1月1号起要求Appstore 上线的应用都必须使用 https 加密请求协议,在二月份又改为建议 从 http 升级为 https 协议,此为背景. 公司做的APP同时在App ...
- php的empty()和isset()用法
共同点: 1.都可以判定一个变量是否为空: 2.都返回boolean类型,即true或false. 区别: 1.isset()用来检测变量是否设置,只能用于变量,因为传递任何其它参数都将造成解析错误. ...
- Java设计模式之接口型模式总结
摘要: 原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6508967.html 之前认真学习了Java设计模式中的四大接口型模式,分别为:适 ...