파이썬 실습/GUI,윈도우 폴더 용량 체크 프로그램 만들기

파이썬 GUI/윈도우 폴더 용량체크 프로그램 만들기 - 2.파일 및 폴더 용량 체크1

파기차차 2023. 1. 6. 07:17
728x90
반응형
SMALL
728x90
반응형

ㅁ 개요

 

O 프로그램 소개

 

 

 - 이번 글은 이전글(2022.12.10 - [분류 전체보기] - 파이썬 GUI/윈도우 폴더 용량체크 프로그램 만들기 - 1.소개편)에 이은 2번째 글로 파일 및 폴더의 사이즈를 체크하는 방법에 대하여 설명합니다.

 

 

 

O 완성된 프로그램 실행 화면

 

 

 - 최종 완성된 프로그램의 결과화면은 아래와 같습니다.

 

 

(1) 파일사이즈 체크 프로그램(1.py) 실행 후 (2)실제 파일의 우클릭 > (3)속성에서 파일 크기를 확인합니다.

그리고 나서 프로그램의 실행 결과(286154)와 같은지 비교해 봅니다.

 

아래 그림에서 보듯이 프로그램의 실행결과와 실제 파일의 크기가 동일한 것을 확인할 수 있습니다.

 

 

(1) 마찬가지로 폴더 사이즈 체크 프로그램(2.py) 실행 후 (2)실제 폴더의 우클릭 > (3)속성에서 폴더 크기를 확인합니다.

그리고 나서 프로그램의 실행 결과(289225)와 같은지 비교해 봅니다.

 

아래 그림에서 보듯이 프로그램의 실행결과와 실제 폴더의 크기가 동일한 것을 확인할 수 있습니다.

 

 

 

 

 


 

ㅁ 세부 내용

 

O 완성된 소스

 

 

소스 : 1.py( 파일 사이즈 체크)

import os

# 파일 사이즈 확인
print(os.path.getsize('u.png'))

 

 

소스 : 2.py (폴더 사이즈 체크)

import os

# 파일 사이즈 확인
print(os.path.getsize('u.png'))



# 폴더 사이즈 확인
def get_dir_size(path='.'):
    total = 0
    with os.scandir(path) as it:
        for entry in it:
            if entry.is_file():
                total += entry.stat().st_size
            elif entry.is_dir():
                total += get_dir_size(entry.path)
    return total

print(get_dir_size('./a'))

 

 

 

 

O 소스 다운로드 및 실행

 
 - 소스파일 다운로드 후 cmd 또는 파워쉘 등에서 아래와 같이 실행하시기 바랍니다.
 
 > python 1.py
 
 > python 2.py

 

 


 
 

O 주요 내용

 

1. 파이썬에서 파일의 크기를 확인하는 방법은 'os.path.getsize()' 함수를 사용하면 간단하게 해당 파일의 크기를 구할 수 있습니다.

 

 

 

 

 

 

 2. 폴더의 크기를 구하는 방법은 파일의 크기를 구하는 것보다는 약간 복잡합니다.

 아래는 전체 소스입니다.

 

 

 위의 소스에서는 './a' 와 같이 현재 디렉토리 아래의 'a' 디렉토리의 크기를 구하고 있는데, 'a' 디렉토리의 구조는 다음과 같습니다. (하위에 1개의 폴더('b')와 2개의 파일('u.png', 'folderCheck.ui' 존재)

 

a |----- b-----folderCheck.ui

   |----- u.png

 

 

'a'폴더의 전체 용량은 289,225 바이트입니다.

 

 

 

 

먼저 ./a/u.png 파일의 용량은 286,154 바이트이고,

 

 

 

 

 ./a/b/folderCheck.ui 파일의 용량은 3,071 바이트입니다.

 

 

따라서 ./a/u.png 파일과 ./a/b/folderCheck.ui 파일의 크기를 더하면 'a'폴더의 용량을 구할 수 있는데,

286,154 + 3,071 = 289,225

 

위와 같이 처음 'a'폴더의 속성에서 확인한 크기와 정확히 동일합니다.

 

 

 

 

그럼, 이제 아래의 소스를 하나씩 살펴보겠습니다.

먼저 print(get_dir_size('./a')) 문으로 get_dir_size()함수를 호출하고, 현재 디렉토리 아래에 있는 'a' 폴더의 크기를 구합니다.

 

소스 내부에서는 'a' 디렉토리 내의 파일과 폴더를 스캔하여 it변수에 담습니다.

그리고, it변수의 파일과 폴더를 entry에 넣어 for문으로 돌리는데, entry가 파일이면 entry.stat().st_size 구문으로 파일의 크기를 구한 후 total 변수에 넣고,

폴더인 경우 다시 자신을 호출(재귀)하여 폴더 내 파일의 크기를 구합니다.

 

 

위에서 설명드린 'a'폴더의 구조는 그 하위에 'b' 폴더와 파일 2개('u.png', 'folderCheck.ui' )가 있으므로

1. 'b' 는 폴더이므로 다시 자신(재귀) 호출하여 그 하위의 파일과 폴더를 보는데,

2. 'b' 폴더 아래에는 'folderCheck.ui' 파일만 존재하므로 파일의 크기(3,071)를 구하여 total 변수에 담습니다.

3. 그 다음 남아 있는 것은 'u.png' 파일만 남았으므로 이 파일의 크기(286,154)를 구하고, 이전 total의 값과 더하게 되는데, 따라서 이전 total 변수의 값인 3,071과 조금 전 구한 파일크기 286,154를 더하여 최종 total 변수에 담기는 값은 289,225이 됩니다.

 

위 설명이 헷갈리는 경우 천천히 한줄씩 음미해가면서 살펴보시기 바랍니다.

 

 

 

 


 

 

O 소스 분석

 

1. print(os.path.getsize('u.png')) <-- 파일 사이즈 확인 

# 폴더 사이즈 확인
2.
def get_dir_size(path='.'):
    total = 0
    with os.scandir(path) as it: # <-- 'path' 경로의 존재하는 모든 파일과 폴더 스캔 후
        for entry in it: # <-- for문으로 하나씩 돌면서
            if entry.is_file(): #<-- 파일이면 
                total += entry.stat().st_size #<-- 파일의 크기를 구한 후 total 변수에 담고
            elif entry.is_dir(): #<-- 폴더이면
                total += get_dir_size(entry.path) #<-- 다시 자신(get_dir_size())을 호출하여 그 하위 폴더 내 파일들의 사이즈의 합을 구함

 

 


 

ㅁ 정리

 

O 우리가 배운 내용

 
 - 오늘은 파일 및 폴더의 사이즈를 체크하는 방법에 대하여 알아보았습니다.
 
 
 
 
 - 오늘 우리가 배운 내용을 두줄로 정리해 보면 아래와 같습니다.
 
 
 > 1.파일 사이즈를 확인하는 명령
print(os.path.getsize('u.png'))
 
 > 2.폴더 사이즈 체크 시 하위 폴더 존재 시 다시 재귀적으로 자신을 호출하여 파일들의 크기의 합을 구함
 total += get_dir_size(entry.path)

 

오늘은 여기까지이며, 위의 내용이 유익하셨다면, 좋아요와 구독 부탁드립니다.

 

 

감사합니다.

 

 

 

※ 추가적인 정보는 아래 유튜브 영상에서 해당 내용을 더욱 자세히 보실 수 있습니다.

 

728x90
반응형
LIST