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

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

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

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

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

原文地址:https://www.cnblogs.com/johnthegreat/p/12591502.html

时间: 2024-10-25 17:30:52

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

Pyhon 获取文件夹的大小统计

通过Python 实现文件夹大小的统计:主要是通过了 import os 中的几个方法来实现.         --Zero Python OS 文件/目录方法 首先介绍用到的几个函数,写了一个小demo便于理解. os.getcwd() 返回当前路径. os.listdir (path) 返回当前路径下的文件夹与文件(不向下二级递归). os.path.join() join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. os.path 让join()识别为路径,根据系统自动

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

原文 https://help.aliyun.com/document_detail/88458.html?spm=a2c4g.11186623.2.11.792462b15oU02q OSS文件按照字母顺序排列.Python SDK提供了一系列列举文件及获取指定目录下文件大小的方法. 简单列举 以下代码用于列举指定存储空间下的10个文件: # -*- coding: utf-8 -*- import oss2 from itertools import islice # 阿里云主账号Acces

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

>>> import os >>> os.path.exists('d:/assist') True >>> os.path.exists('d:/assist/getTeacherList.py') True >>> os.path.isfile('d:/assist') False >>> os.path.isfile('d:/assist/getTeacherList.py') True >>>

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

在iOS的App沙盒中,Documents和Library/Preferences都会被备份到iCloud,因此只适合放置一些记录文件,例如plist.数据库文件.缓存一般放置到Library/Caches,tmp文件夹会被系统随机清除,不适宜防止数据. [图片缓存的清除] 在使用SDWebImage时,图片被大量的缓存,有时需要获取缓存的大小以及清除缓存. 要获取缓存大小,使用SDImageCache单例的getSize方法拿到byte为单位的缓存大小,注意计算时按1K=1000计算. 拿到M

统计文件夹的大小

import java.io.File; import java.util.Scanner; public class Test1 { /** * * @param args * * 需求:1,从键盘接收一个文件夹路径,统计该文件夹大小 * * 从键盘接收一个文件夹路径 * * 1,创建键盘录入对象 * * 2,定义一个无限循环 * * 3,将键盘录入的结果存储并封装成File对象 * * 4,对File对象判断 * * 5,将文件夹路径对象返回 * * 统计该文件夹大小 * * 1,定义一个求

SHELL编程练习-获得指定目录下的所有文件及文件夹的大小

一.目的编写一个脚本,可以获得指定目录下的所有文件及文件夹的大小.输出的样式与 ls -lh 命令相同.命令执行示例,其中和 ls -lh 命令输出的唯一区别是目录的大小:1.1.ls -lh命令的输出(注意目录大小) [[email protected] ~]# ls -lh /root/dir1/ total 24M drwxr-xr-x 3 root root 4.0K Feb 6 13:54 dir2 drwxr-xr-x 2 root root 4.0K Feb 6 13:55 dir

递归实现显示目标文件夹的所有文件和文件夹,并计算目标文件夹的大小

递归的一个典型应用就是遍历目标文件夹,把该文件夹下的所有文件和文件夹打印或显示出来,还可以递归计算目标文件夹的总大小. 1: class Program 2: { 3: static void Main(string[] args) 4: { 5: Console.WriteLine("输入目标文件夹"); 6: string path = Console.ReadLine(); 7: FindFoldersAndFiles(path); 8: Console.WriteLine(&q

获取某文件夹下所有文件名、文件夹名、后缀名

今天在提交github时,突然觉得提交得很慢,想到github允许设置.gitignore文件进行某些后缀名的忽略,于是乎决定好好设置一下.gitimnore. 于是乎....我发现,一个很大的项目,或者一个很杂乱的文件库,很难知道这里面到底存在哪些后缀名的文件,一个文件夹一个文件夹的找又太慢,而且容易出错. 于是乎....我开始敲代码了,顺带着把获取某文件夹下所有文件名.文件夹名.后缀名这三个功能一起实现了. [来看效果] 不输入参数时或者第一个参数输入"\"时,默认为当前目录,显示

[工具] TreeSizeFree 查看每个文件夹的大小

下载 URL :http://www.jam-software.com/treesize_free/ TreeSize Free这个软件可以非常简单方便的查看到每个文件夹的大小,而目录树的查看方式则让操作更加的方便.更有效率. windows的资源管理器相信大家都非常的熟悉,在日常使用中相信许多人会发现它的不足!那就是没有一种查看方式能够让你知道每个文件夹的大小,在硬盘空间不够的时候,想要知道哪些文件夹占用了大量空间更是难上加难. 现在你就不要为这个再头疼了,因为TreeSize Free这个软