很多时候,查看一个文件夹下的每个文件大小可以轻易的做到,因为文件后面就是文件尺寸,但是如果需要查看一个文件夹下面所有的文件夹对应的尺寸,就发现需要把鼠标放到对应的文件夹上,稍等片刻才会出结果。

有时候,我们需要查看几十个甚至于上百个文件夹,找出包含文件最多,空间占用最大的那个,就比较麻烦了。这段代码是我以前的代码,可以按大小排序输出文件夹大小到txt文件,供使用的方便。

格式化当时花了很长时间,最后发现使用‘YaHei.Consolas’字体可以解决,对齐后输出结果看起来还算舒服。

上代码:

import os
import datetime def get_folder_size(path):
folder_size = 0 if not os.path.exists(path):
return folder_size if os.path.isfile(path):
folder_size = os.path.getsize(path)
return folder_size
try:
if os.path.isdir(path):
with os.scandir(path) as directory_lists:
for directory_list in directory_lists:
if directory_list.is_dir():
sub_folder_size = get_folder_size(directory_list.path) # 递归获取大小
folder_size += sub_folder_size
elif directory_list.is_file():
file_size = os.path.getsize(directory_list.path)
folder_size += file_size return folder_size
except:
pass # 以下主要是为了格式化输出
def get_file_length(file_name):
characters = list(file_name)
ascii_length = 0
utf8_length = 0 for character in characters:
if ord(character) < 128:
ascii_length += 1
else:
utf8_length += 2 return ascii_length + utf8_length def main(basedir):
with os.scandir(basedir) as dirs:
directory_size = []
for dir in dirs:
try:
if not dir.is_file():
dirsize = round(get_folder_size(dir.path) / 1000000) # return the file size in Mb
resformat = [dir.name, dirsize]
directory_size.append(resformat)
except:
pass
results = sorted(directory_size, key=lambda x: x[1], reverse=True) # return a list ordered by size
results = [[i[0], '文件夹大小:' + str(i[1]) + ' Mb'] for i in results] with open(basedir + os.sep + datetime.date.today().isoformat() + '.txt', 'a+') as f:
for result in results:
# 按照50的宽度格式化输出结果
len1 = 50 - get_file_length(result[0]) + len(result[0])
len2 = 25 - get_file_length(result[1]) + len(result[1])
f.writelines('{:<{len1}s} {:>{len2}s}\n'.format(result[0], result[1], len1=len1, len2=len2))
print('The result was successfully saved in the directory with date as file name.') if __name__ == "__main__":
basedir = input("Please input the directory you would like to know the sizes: ")
main(basedir)

如果输入相应的文件夹路径,输出结果如下:

有时间我再简化一下代码,目前先这样。

Python - 批量获取文件夹的大小输出为文件格式化保存的更多相关文章

  1. shell 文件夹总大小 du -sh 文件夹

    du -sh 文件夹 du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件> ...

  2. 如何获取阿里云OSS上每个文件夹的大小

    原文 https://help.aliyun.com/document_detail/88458.html?spm=a2c4g.11186623.2.11.792462b15oU02q OSS文件按照 ...

  3. python判断文件和文件夹是否存在、创建文件夹

    >>> import os >>> os.path.exists('d:/assist') True >>> os.path.exists('d: ...

  4. python 判断文件和文件夹是否存在、创建文件夹

    原文链接:https://www.cnblogs.com/hushaojun/p/4533241.html >>> import os >>> os.path.ex ...

  5. python实践项目十:zipfile模块-将一个文件夹备份到一个 ZIP 文件

    描述:将指定路径下的某文件夹备份到一个zip文件 代码: #!/usr/bin/python # -*- coding: UTF-8 -*- # backupToZip - Copies an ent ...

  6. java:多层文件夹情况下,判断文件夹下是否有文件夹,并获取到没有文件夹的名字的方法

    业务问题案例 在公司遇到的一个问题,本以为很小很好解决,没想到花了一下午时间.图给的是文件路径,page1下有10个文件夹,每个有的有文件夹或者文件,要求得到page1下(即:123456789,10 ...

  7. (一一七)基本文件操作 -SDWebImage清除缓存 -文件夹的大小计算

    在iOS的App沙盒中,Documents和Library/Preferences都会被备份到iCloud,因此只适合放置一些记录文件,例如plist.数据库文件.缓存一般放置到Library/Cac ...

  8. C#_IO操作_查询指定文件夹下的每个子文件夹占空间的大小

    1.前言 磁盘内存用掉太多,想查那些文件夹占的内存比较大,再找出没有用的文件去删除. 2.代码 static void Main(string[] args) { while (true) { //指 ...

  9. java批量解压文件夹下的所有压缩文件(.rar、.zip、.gz、.tar.gz)

    // java批量解压文件夹下的所有压缩文件(.rar..zip..gz..tar.gz) 新建工具类: package com.mobile.utils; import com.github.jun ...

随机推荐

  1. ThreadPoolTaskExecutor 中 corePoolSize vs. maxPoolSize

    1. 概览 Spring中的 ThreadPoolTaskExecutor 是一个 JavaBean ,提供围绕java.util.concurrent.ThreadPoolExecutor 的抽象实 ...

  2. 如何定时备份Mysql数据库

    1.创建备份数据库存储目录 cd data/db mkdir backup #创建存储目录 2.添加备份脚本 vim backupdb.sh #创建脚本文件 脚本内容如下: #!/bin/sh db_ ...

  3. OpenCV-Python 图像上的算术运算 | 十一

    目标 学习图像的几种算术运算,例如加法,减法,按位运算等. 您将学习以下功能:cv.add,cv.addWeighted等. 图像加法 您可以通过OpenCV函数cv.add()或仅通过numpy操作 ...

  4. react 周期函数

    1.constructor():构造函数执行时间:组件被加载前最先调用,并且仅调用一次作用:定义状态机变量注意:第一个语句必须是super(props),正确定义状态机代码如下constructor( ...

  5. js 拖拽 鼠标事件,放大镜效果

    设置网站播放视频 只有一个是播放的 //需要引入jquery var v = $("video") v.bind("play",function(){ for( ...

  6. SQL Server中创建sde数据库

    在ArcCatalog或者ArcMap中打开ArcToolBox工具箱. 在工具箱中,找到创建企业级地理数据库工具,依次为数据管理工具→地理数据库管理→创建企业级地理数据库,如图所示. 双击打开创建企 ...

  7. 《JAVA与模式》之责任链模式 【转载】

    转载自java_my_life的博客 原文地址:http://www.cnblogs.com/java-my-life/archive/2012/05/28/2516865.html 在阎宏博士的&l ...

  8. stm32:简单按键输入实现

    开发环境keil4,芯片STM32F103C8T6 1.main.c //串口实验 #include "sys.h" #include "delay.h" #i ...

  9. testng.xml配置

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "htt ...

  10. MyBatis 学习笔记(2)

    1.执行SQL时传递多参数 如果 parameterType 使用 map 类型,即 parameterType="map",那么可以使用注解(@Param)方式传递参数,而最好不 ...