카테고리 없음
📁 폴더 용량 시각화 분석기 - 무료 실행파일 다운로드 (Windows용)
유현석
2025. 5. 24. 13:56
컴퓨터 하드디스크 정리할 때,
어떤 폴더가 용량을 많이 차지하는지 헷갈리신 적 없으셨나요?
이 프로그램은
용량 많은 폴더를 시각적으로 색으로 표시해주는 무료 툴입니다.
📦 프로그램 이름
Folder Analysis (윈도우 전용 .exe)
✅ 주요 기능
- 📂 트리 구조 탐색기 (좌측)
- 📊 폴더 정보 테이블 (우측)
- 하위 폴더들의 파일 수, 총 용량(MB), 수정일
- 🎨 용량 크기에 따라 배경색 자동 지정
- 작을수록 연한 초록, 클수록 진한 빨강
- 🧠 용량 시각화를 통해 정리 대상 폴더를 빠르게 파악 가능
📎 다운로드 링크
🟢 실행파일 (.exe) 바로 다운로드:
👉 folder_analysis.exe 다운로드
- 설치 필요 없음
- Windows 10 이상 권장
- Google Drive 바이러스 검사 불가 메시지가 뜰 수 있습니다 → [계속 다운로드] 클릭
🖥️ 화면 미리보기
📁 내 문서/
├─ Downloads 🔴 4.8 GB
├─ Pictures 🟢 0.2 GB
├─ Projects 🟡 1.3 GB
용량이 클수록 진한 색상으로 표시되어
눈으로 바로 “무거운 폴더”를 인식할 수 있습니다.
🛠 기술 정보
- 제작: Python 3.11 + PyQt5
- 빌드: PyInstaller (--onefile --windowed)
- 구조: TreeView + QTableWidget + QColor 기반 시각화
import sys
import os
import datetime
from PyQt5.QtWidgets import (
QApplication, QWidget, QTreeView, QFileSystemModel, QVBoxLayout,
QHBoxLayout, QTableWidget, QTableWidgetItem, QLabel, QSplitter
)
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QColor, QBrush
from pathlib import Path
from collections import defaultdict
class FolderExplorer(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("🗂️ 용량 시각화 탐색기")
self.setGeometry(100, 100, 1400, 800)
layout = QHBoxLayout()
self.setLayout(layout)
# 좌측 TreeView
self.model = QFileSystemModel()
self.model.setRootPath("C:/")
self.tree = QTreeView()
self.tree.setModel(self.model)
self.tree.setRootIndex(self.model.index("C:/"))
self.tree.setColumnWidth(0, 300)
self.tree.clicked.connect(self.on_tree_clicked)
# 우측 레이아웃
right_layout = QVBoxLayout()
self.dir_table = QTableWidget()
self.dir_table.setColumnCount(5)
self.dir_table.setHorizontalHeaderLabels(["폴더명", "파일 수", "크기(MB)", "수정일", "경로"])
self.dir_table.setMinimumHeight(300)
self.ext_table = QTableWidget()
self.ext_table.setColumnCount(2)
self.ext_table.setHorizontalHeaderLabels(["확장자", "파일 수"])
right_layout.addWidget(QLabel("📁 폴더 정보 (용량에 따라 배경 색상 표시)"))
right_layout.addWidget(self.dir_table)
right_layout.addWidget(QLabel("📦 확장자 통계"))
right_layout.addWidget(self.ext_table)
splitter = QSplitter(Qt.Horizontal)
splitter.addWidget(self.tree)
right_widget = QWidget()
right_widget.setLayout(right_layout)
splitter.addWidget(right_widget)
layout.addWidget(splitter)
def on_tree_clicked(self, index):
path = self.model.filePath(index)
self.scan_folder(path)
def scan_folder(self, folder_path):
folder_data = []
ext_data = defaultdict(int)
try:
subfolders = [f for f in os.listdir(folder_path) if os.path.isdir(os.path.join(folder_path, f))]
except PermissionError:
return
for folder in subfolders:
full_path = os.path.join(folder_path, folder)
folder_size = 0
file_count = 0
try:
for entry in os.listdir(full_path):
entry_path = os.path.join(full_path, entry)
if os.path.isfile(entry_path):
folder_size += os.path.getsize(entry_path)
file_count += 1
ext = Path(entry_path).suffix.lower()
ext_data[ext] += 1
elif os.path.isdir(entry_path):
try:
for subentry in os.listdir(entry_path):
sub_path = os.path.join(entry_path, subentry)
if os.path.isfile(sub_path):
folder_size += os.path.getsize(sub_path)
file_count += 1
ext = Path(sub_path).suffix.lower()
ext_data[ext] += 1
except:
continue
except:
continue
try:
last_mod = datetime.datetime.fromtimestamp(os.path.getmtime(full_path)).strftime('%Y-%m-%d %H:%M')
except:
last_mod = "알 수 없음"
folder_data.append([
folder,
str(file_count),
f"{folder_size / (1024**2):.2f}", # MB
last_mod,
full_path
])
# 최대 용량 계산 (색상 기준)
size_list = [float(row[2]) for row in folder_data if float(row[2]) > 0]
max_size = max(size_list) if size_list else 1
# 디렉토리 테이블 채우기 (배경색 적용)
self.dir_table.setRowCount(len(folder_data))
for i, row in enumerate(folder_data):
size_mb = float(row[2])
color = self.get_color_by_size(size_mb, max_size)
for j, val in enumerate(row):
item = QTableWidgetItem(val)
item.setBackground(QBrush(color))
self.dir_table.setItem(i, j, item)
# 확장자 테이블 채우기
ext_items = sorted(ext_data.items(), key=lambda x: -x[1])
self.ext_table.setRowCount(len(ext_items))
for i, (ext, count) in enumerate(ext_items):
self.ext_table.setItem(i, 0, QTableWidgetItem(ext if ext else "[없음]"))
self.ext_table.setItem(i, 1, QTableWidgetItem(str(count)))
def get_color_by_size(self, size_mb, max_size):
"""용량 기준으로 색상 결정 (작을수록 연녹, 클수록 빨강 계열)"""
ratio = min(size_mb / max_size, 1.0)
red = int(255 * ratio)
green = int(255 * (1 - ratio))
return QColor(red, green, 100) # 예: (255,0,0)=빨강, (0,255,100)=녹색
if __name__ == "__main__":
app = QApplication(sys.argv)
window = FolderExplorer()
window.show()
sys.exit(app.exec_())
#폴더용량분석기 #파일정리툴 #PyQt5 #윈도우유틸 #무료다운로드 #Python프로그램 #시각화툴 #exe도구 #용량정리 #폴더시각화 #파일관리