使用 Python 计算文件夹大小并找到最大文件和文件夹

在日常工作中,我们经常需要了解文件夹的大小以及其中最大文件和文件夹的详细信息。本文将介绍如何使用 Python 编写一个脚本,遍历指定文件夹及其子文件夹,计算总大小,并找出最大文件和文件夹。我们将使用 os 模块来实现这一功能。

需求分析

我们的目标是编写一个 Python 脚本,实现以下功能:

  1. 遍历指定文件夹及其子文件夹。
  2. 计算所有文件和文件夹的总大小。
  3. 找出最大的文件及其大小。
  4. 找出最大的子文件夹及其大小。
使用的 Python 模块

我们将使用 os 模块来进行文件和目录操作。os.walk 函数可以帮助我们遍历目录树,并获取目录路径、目录名和文件名。os.path.getsize 函数用于获取文件大小。

 代码详解

1. 导入模块

  
 

 import os


   

   我们首先导入了 `os` 模块,用于文件和目录操作。

2. 定义 `get_folder_size` 函数

   def get_folder_size(folder_path):
       total_size = 0
       max_file_size = 0
       max_file = ""
       max_folder_size = 0
       max_folder = ""


   

   初始化总大小、最大文件大小、最大文件路径、最大文件夹大小和最大文件夹路径。

3. 遍历目录树

   for dirpath, dirnames, filenames in os.walk(folder_path):
       folder_size = sum(os.path.getsize(os.path.join(dirpath, filename)) for filename in filenames)
       total_size += folder_size


   

   使用 `os.walk` 遍历目录树,计算每个目录的大小并累加到总大小中。

4. 更新最大文件夹和文件信息

   if folder_size > max_folder_size:
       max_folder_size = folder_size
       max_folder = dirpath

   for filename in filenames:
       file_size = os.path.getsize(os.path.join(dirpath, filename))
       if file_size > max_file_size:
           max_file_size = file_size
           max_file = os.path.join(dirpath, filename)


   

   在遍历过程中,更新最大文件夹大小和路径,检查每个文件并更新最大文件大小和路径。

5. 返回结果

   return total_size, max_file, max_folder, max_folder_size


   

   返回总大小、最大文件路径、最大文件夹路径和最大文件夹大小。

6. 定义 `convert_bytes_to_readable` 函数

   def convert_bytes_to_readable(size_in_bytes):
       units = ['B', 'KB', 'MB', 'GB', 'TB']
       unit_index = 0
       while size_in_bytes >= 1024 and unit_index < len(units) - 1:
           size_in_bytes /= 1024
           unit_index += 1
       return "{:.2f} {}".format(size_in_bytes, units[unit_index])
   

   将字节大小转换为可读格式(B、KB、MB、GB、TB)。

7. 测试脚本

   folder_path = r'C:\Users\admin\desktop'
   total_size, max_file, max_folder, max_folder_size = get_folder_size(folder_path)

   print("所有文件和文件夹的总大小:", convert_bytes_to_readable(total_size))
   print("最大的文件:", max_file, "大小:", convert_bytes_to_readable(os.path.getsize(max_file)))
   print("最大的文件夹:", max_folder, "大小:", convert_bytes_to_readable(max_folder_size))


 

   指定文件夹路径,调用 `get_folder_size` 函数并打印结果。

代码实现

以下是完整的代码实现:

import os

def get_folder_size(folder_path):
    total_size = 0
    max_file_size = 0
    max_file = ""
    max_folder_size = 0
    max_folder = ""

    # 遍历目录及子目录
    for dirpath, dirnames, filenames in os.walk(folder_path):
        # 计算目录大小
        folder_size = sum(os.path.getsize(os.path.join(dirpath, filename)) for filename in filenames)
        total_size += folder_size

        # 更新最大目录大小和目录名
        if folder_size > max_folder_size:
            max_folder_size = folder_size
            max_folder = dirpath

        # 计算并更新最大文件大小和文件名
        for filename in filenames:
            file_size = os.path.getsize(os.path.join(dirpath, filename))
            if file_size > max_file_size:
                max_file_size = file_size
                max_file = os.path.join(dirpath, filename)

    return total_size, max_file, max_folder, max_folder_size

def convert_bytes_to_readable(size_in_bytes):
    units = ['B', 'KB', 'MB', 'GB', 'TB']
    unit_index = 0
    while size_in_bytes >= 1024 and unit_index < len(units) - 1:
        size_in_bytes /= 1024
        unit_index += 1
    return "{:.2f} {}".format(size_in_bytes, units[unit_index])

folder_path = r'C:\Users\admin\desktop'
total_size, max_file, max_folder, max_folder_size = get_folder_size(folder_path)

print("所有文件和文件夹的总大小:", convert_bytes_to_readable(total_size))
print("最大的文件:", max_file, "大小:", convert_bytes_to_readable(os.path.getsize(max_file)))
print("最大的文件夹:", max_folder, "大小:", convert_bytes_to_readable(max_folder_size))

 运行结果

相关推荐

  1. 【笔记】计算文件夹大小

    2024-07-15 21:34:01       54 阅读
  2. 使用python压缩pdf文件大小

    2024-07-15 21:34:01       46 阅读
  3. python批量合并word文件统一调整图片大小

    2024-07-15 21:34:01       58 阅读
  4. macOS 获取文件夹大小

    2024-07-15 21:34:01       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 21:34:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 21:34:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 21:34:01       58 阅读
  4. Python语言-面向对象

    2024-07-15 21:34:01       69 阅读

热门阅读

  1. C++ 入门第12:模板(Template)

    2024-07-15 21:34:01       23 阅读
  2. 渗透环境安装篇之安装XSS漏洞靶场xss-labs

    2024-07-15 21:34:01       18 阅读
  3. Codeforces Round 957 (Div. 3)

    2024-07-15 21:34:01       22 阅读
  4. Qt中QTimer类使用简介

    2024-07-15 21:34:01       18 阅读
  5. 数仓实践:数据仓库建设公共规范指南

    2024-07-15 21:34:01       18 阅读