지정된 폴더의 크기 계산 및 표시

배경 요구 사항

때때로 컴퓨터의 디스크 공간이 점점 작아지고 많은 공간을 차지하는 일부 파일을 삭제해야 합니다. 가장 어리석은 방법은 특정 폴더의 크기를 하나씩 확인하는 것인데 너무 느립니다.

렌더링

여기에 이미지 설명 삽입
여기에 이미지 설명 삽입

암호

import os
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'sans-serif'  # 设置字体为无衬线字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置使用SimHei字体(中文的衬线字体)

plt.rcParams['font.size'] = 12
plt.rcParams['axes.linewidth'] = 1.5
plt.rcParams['axes.grid'] = True
def get_folder_size(folder):
    total_size = 0
    for root, dirs, files in os.walk(folder):
        for file in files:
            file_path = os.path.join(root, file)
            total_size += os.path.getsize(file_path)
    return total_size / (1024 * 1024)  # 转换为MB

def get_folder_sizes(directory):
    folder_sizes = {
    
    }
    for item in os.listdir(directory):
        item_path = os.path.join(directory, item)
        if os.path.isdir(item_path):
            folder_size = get_folder_size(item_path)
            folder_sizes[item] = folder_size
    return folder_sizes

def plot_bar_chart(folder_sizes):
    folders, sizes = zip(*folder_sizes.items())
    colors = plt.cm.tab20c(range(len(folders)))
    plt.figure(figsize=(10, 6))
    plt.bar(folders, sizes, color=colors)
    plt.xlabel('Folders')
    plt.ylabel('Size (MB)')
    plt.title('Folder Sizes')
    plt.xticks(rotation=45, ha='right')
    plt.tight_layout()
    plt.show()

def plot_pie_chart(folder_sizes):
    folders, sizes = zip(*folder_sizes.items())
    plt.figure(figsize=(8, 8))
    plt.pie(sizes, labels=folders, autopct='%1.1f%%', startangle=140)
    plt.title('Folder Size Distribution')
    plt.axis('equal')
    plt.show()

if __name__ == "__main__":
    # current_directory = os.getcwd()
    target_directory = r"D:\A计算机学习文件夹"  
    folder_sizes = get_folder_sizes(target_directory)

    for folder, size in folder_sizes.items():
        print(f"{
      
      folder}: {
      
      size:.2f} MB")

    plot_bar_chart(folder_sizes)
    plot_pie_chart(folder_sizes)


추천

출처blog.csdn.net/qq_41661809/article/details/131995142