【Python】os.walk的使用及获取文件夹下所有文件的大小

Python016

【Python】os.walk的使用及获取文件夹下所有文件的大小,第1张

在说os.walk前,我们先在ipython3中help一下,打印如下

os.walk返回一个生成器,每次遍历返回的对象是一个元组,元组中包含三个元素:

dirpath:当前遍历的文件夹的路径,类型为字符串;

dirname:当前遍历的文件夹下的子文件夹的名字,类型为列表;

filenames:当前遍历的文件夹下的文件的名字,类型为列表;

创建一个包含子文件夹和文件的walk文件夹,通过终端tree看一下目录结构:

我们通过for循环遍历os.walk()的返回结果

运行结果如下:

使用os.walk()获取文件夹下的文件大小:

实时检测我觉得可能没必要了,周期性检测倒是不错,比如每隔30秒检查一次,除非你一秒钟就几十上百兆数据写入,那就得实时检测了。

实时监测的话,在while循环里不停的查看文件夹的变化

首写关于文件夹的大小,据我所知道的python标准库并没有提供关于文件夹大小的api或套件,你需要一个一个文件的去遍历获取文件的大小累加求和,获取文件大小可以使用os.stat(文件路径)。不过最好的方式,我觉得是通过调用系统命令获取文件夹的大小,这样就不用写递归方法,获取你要清空目录下的文件目录结构,当然目录结构简单的话,递归方法都不用写。不知道你的操作系统是什么,linux的话可以用

du -sh /data/applog/

在python2.7中可以使用commands.getoutput执行上面的命令并获取到输出结果

第二就是关于清空文件夹的,你必须保证没有程序对你要清空的目录进行访问,你才能正常的清空,否则,对于在使用中的文件你会清空失败。清空文件夹你可以使用shutil库里的rmtree()方法,它不管你文件夹是否有文件或子文件夹,使用它就是一行代码的事情,如果使用os模块进行删除的话你要从最底层文件夹开始删除。最后你再重新新建这文件夹

上面只是思路,具体使用还得根据你的实际需要来的

如果你要进行周期性检测的话,可以使用标准库中的sched库来开发