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 ...
随机推荐
- C++ Primer 笔记 第二章
C++ Primer 第二章 变量和基本类型 2.1基本内置类型 有算数类型和void类型:算数类型储存空间大小依及其而定. 算数类型表: 类型 含义 最小储存空间 bool 布尔型 - char 字 ...
- C#进阶系列——使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)
前言:上篇C#进阶系列——使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)介绍了下使用Advanced Installer配置IIS和Web.confi ...
- java io基础(java.io)
首先流分为输入和输出流,java分为字节流和字符流 1.字节输入流io.InputStream io.InputStream是一个抽象类它实现了Closeable接口的抽象类.那么它的子类(io包下) ...
- 论SNAPSHOT包的危害性
先介绍一下背景:我们应用是一个标准的spring+webx工程,博主在一次项目发布前为了再次测试一下自己的代码,将分支部署到日常环境中,但是项目启动的时候报错: 第一眼看到这个堆栈后有点懵逼 第一是上 ...
- ActiveMQ消息队列用法
pom.xml文件如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:// ...
- 应用 EditPlus 配置 Java 编译环境
此文全文摘抄自: http://jingyan.baidu.com/album/37bce2be3ceef61002f3a208.html?picindex=7,谢啦 应用成功: EditPlus(文 ...
- java udp 发送小数数字(较难)
代码全部来自:http://825635381.iteye.com/blog/2046882,在这里非常感谢了,我运行测试了下,非常正确,谢谢啊 服务端程序: package udpServer; i ...
- css中的text-overflow
css中的text-overflow HTML中: <body><div class="clip">此处中多余的文字直接被切掉,不显示</div> ...
- Linux输入子系统(一) _驱动编码
输入设备都有共性:中断驱动+字符IO,基于分层的思想,Linux内核将这些设备的公有的部分提取出来,基于cdev提供接口,设计了输入子系统,所有使用输入子系统构建的设备都使用主设备号13,同时输入子系 ...
- [Kafka] - Kafka内核理解:Message
一个Kafka的Message由一个固定长度的header和一个变长的消息体body组成 header部分由一个字节的magic(文件格式)和四个字节的CRC32(用于判断body消息体是否正常)构成 ...