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 获取et和excel的版本号
Apr 09 Python
Python对列表排序的方法实例分析
May 16 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
Dec 12 Python
对pandas数据判断是否为NaN值的方法详解
Nov 06 Python
Python 实现一个手机号码获取妹子名字的功能
Sep 25 Python
Python利用matplotlib绘制约数个数统计图示例
Nov 26 Python
Pycharm配置PyQt5环境的教程
Apr 02 Python
Python基于pandas爬取网页表格数据
May 11 Python
Python3爬虫中pyspider的安装步骤
Jul 29 Python
python 字符串格式化的示例
Sep 21 Python
虚拟环境及venv和virtualenv的区别说明
Feb 05 Python
python异步的ASGI与Fast Api实现
Jul 16 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
动画 《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
2014/04/29 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
PHP目录操作实例总结
2016/09/27 PHP
php提交表单时保留多个空格及换行的文本样式的方法
2017/06/20 PHP
js 字符串转化成数字的代码
2011/06/29 Javascript
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
控制文字内容的显示与隐藏示例
2014/06/11 Javascript
jQuery基于cookie实现的购物车实例分析
2015/12/24 Javascript
利用jQuery实现CheckBox全选/全不选/反选的简单代码
2016/05/31 Javascript
js实现打地鼠小游戏
2017/02/13 Javascript
详解vue-cli脚手架build目录中的dev-server.js配置文件
2017/11/24 Javascript
Vue+webpack项目基础配置教程
2018/02/12 Javascript
react以create-react-app为基础创建项目
2018/03/14 Javascript
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
Vue实现todo应用的示例
2021/02/20 Vue.js
[01:00:11]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第一场 2月7日
2021/03/11 DOTA
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
Django Rest framework之权限的实现示例
2018/12/17 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
Sephora丝芙兰泰国官方网站:国际知名化妆品购物
2017/11/15 全球购物
西班牙多品牌鞋店连锁店:Krack
2018/11/30 全球购物
XML文档面试题
2015/08/05 面试题
介绍一下gcc特性
2015/10/31 面试题
水利公司纪检监察自我鉴定
2014/02/25 职场文书
李开复演讲稿
2014/05/24 职场文书
西岭雪山导游词
2015/02/06 职场文书
史上最牛的辞职信
2015/02/28 职场文书
幼儿园家长工作总结2015
2015/04/25 职场文书
预防艾滋病宣传活动总结
2015/05/09 职场文书
出生证明格式
2015/06/15 职场文书
聊聊JS ES6中的解构
2021/04/29 Javascript