Python如何批量获取文件夹的大小并保存


Posted in Python onMarch 31, 2020

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

有时候,我们需要查看几十个甚至于上百个文件夹,找出包含文件最多,空间占用最大的那个,就比较麻烦了。这段代码是我以前的代码,可以按大小排序输出文件夹大小到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如何批量获取文件夹的大小并保存

Python如何批量获取文件夹的大小并保存

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中使用 Selenium 实现网页截图实例
Jul 18 Python
小议Python中自定义函数的可变参数的使用及注意点
Jun 21 Python
python批量实现Word文件转换为PDF文件
Mar 15 Python
Python基于辗转相除法求解最大公约数的方法示例
Apr 04 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
Jul 06 Python
PyTorch搭建一维线性回归模型(二)
May 22 Python
Python如何使用turtle库绘制图形
Feb 26 Python
通过实例解析Python return运行原理
Mar 04 Python
python实现简单井字棋小游戏
Mar 05 Python
在python中求分布函数相关的包实例
Apr 15 Python
Django 构建模板form表单的两种方法
Jun 14 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
Jun 23 Python
Django使用list对单个或者多个字段求values值实例
Mar 31 #Python
django实现模板中的字符串文字和自动转义
Mar 31 #Python
Python使用graphviz画流程图过程解析
Mar 31 #Python
Django模板之基本的 for 循环 和 List内容的显示方式
Mar 31 #Python
基于python实现计算且附带进度条代码实例
Mar 31 #Python
Django values()和value_list()的使用
Mar 31 #Python
利用python实现凯撒密码加解密功能
Mar 31 #Python
You might like
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
javascript之函数直接量(function(){})()
2007/06/29 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
详解Javascript动态操作CSS
2014/12/08 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
Vue中使用vux的配置详解
2017/05/05 Javascript
关于使用js算总价的问题
2017/06/23 Javascript
Angularjs的键盘事件的绑定
2017/07/27 Javascript
nodejs实现简单的gulp打包
2017/12/21 NodeJs
JavaScript类的继承方法小结【组合继承分析】
2018/07/11 Javascript
Canvas实现微信红包照片效果
2018/08/21 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
nodejs实现获取本地文件夹下图片信息功能示例
2019/06/22 NodeJs
Vue.js实现大转盘抽奖总结及实现思路
2019/10/09 Javascript
[04:29]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/02/01 DOTA
在Python中使用HTML模版的教程
2015/04/29 Python
关于Python的一些学习总结
2018/05/25 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
python、Matlab求定积分的实现
2019/11/20 Python
Python基于os.environ从windows获取环境变量
2020/06/09 Python
python代码能做成软件吗
2020/07/24 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
草莓网美国官网:Strawberrynet USA
2016/12/11 全球购物
英国图书音像网站:Hive.co.uk(图书、电子书、DVD、蓝光、音乐CD等)
2017/10/16 全球购物
《池塘边的叫声》教学反思
2014/04/12 职场文书
大学生简短的自我评价
2014/09/12 职场文书
开平碉楼导游词
2015/02/06 职场文书
创业计划书之寿司
2019/07/19 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
2021/05/22 Python
python 学习GCN图卷积神经网络
2022/05/11 Python