在日常工作中,我们经常需要了解文件夹的大小以及其中最大文件和文件夹的详细信息。本文将介绍如何使用 Python 编写一个脚本,遍历指定文件夹及其子文件夹,计算总大小,并找出最大文件和文件夹。我们将使用 os
模块来实现这一功能。
需求分析
我们的目标是编写一个 Python 脚本,实现以下功能:
- 遍历指定文件夹及其子文件夹。
- 计算所有文件和文件夹的总大小。
- 找出最大的文件及其大小。
- 找出最大的子文件夹及其大小。
使用的 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))
运行结果