Python에서 파일 및 폴더 크기를 확인하는 방법은 무엇입니까?
게시 됨: 2021-06-16이 기사에서는 Python에서 파일 또는 폴더 의 크기 를 확인하는 방법을 배웁니다.
파이썬은 가장 다재다능한 프로그래밍 언어 중 하나입니다. 이를 통해 작은 CLI(명령줄 인터페이스) 프로그램에서 복잡한 웹 응용 프로그램으로 빌드할 수 있습니다.
그러나 가장 과소 평가된 기능 중 하나는 운영 체제와 상호 작용하는 기능입니다. Python으로 OS 작업을 관리하면 자동화 프로세스를 생성할 때 많은 시간을 절약할 수 있습니다.
Python이 OS와 어떻게 상호 작용하는지 봅시다.
Python은 OS와 어떻게 상호 작용합니까?

누구도 자신의 환경에서 고립되어 살 수 없습니다. 이는 때때로 작업을 완료하기 위해 운영 체제와 상호 작용하는 것이 기본인 Python에도 적용됩니다.
Python에는 OS와 상호 작용할 수 있는 여러 모듈이 있습니다. 가장 많이 사용되는 것은 os, sys, pathlib 및 subprocess입니다.
내장 모듈이므로 PIP로 설치할 필요가 없습니다. 다음 명령문으로 모두 가져올 수 있습니다.
import os import sys import pathlib import subprocess아래 목록은 이러한 각 가져오기의 주요 기능을 나타냅니다.
- Os: 시스템별(OS에 따라 다름) 기능을 사용하는 이식 가능한 방법입니다. 더 고급이 필요하지 않는 한 대부분의 경우 올바른 선택입니다.
- Sys: 시스템 고유의 매개변수 및 기능. 이 모듈은 인터프리터 변수 및 함수에 대한 액세스를 제공합니다. os 모듈은 운영 체제와 상호 작용하고 sys는 Python 인터프리터와 상호 작용합니다.
- Pathlib: 고급 경로 사용. 각 OS에 대한 적절한 의미를 사용하여 파일 시스템을 개체로 나타낼 수 있습니다.
- 하위 프로세스: Python에서 직접 실행 및 하위 프로세스 관리. 여기에는
stdin,stdout및 반환 코드 작업이 포함됩니다. Python 하위 프로세스 가이드를 읽으면 자세히 알아볼 수 있습니다.
필요에 따라 더욱 구체적인 기능을 포함하는 고급 라이브러리가 있습니다. 그러나 대부분의 경우 위의 모듈을 사용하는 것이 좋습니다.
참고: 이러한 모듈에서 제공하는 대부분의 기능은 OS에 따라 다른 출력을 갖습니다. 일반적으로 가장 잘 어울리는 것은 UNIX와 Python이라는 것을 기억하십시오.
이제 Python이 OS와 상호 작용하는 방식에 대해 빠르게 이해했으므로 파일 및 폴더 크기를 확인하는 방법으로 이동해 보겠습니다. 다음 솔루션은 모두 Python GitHub 리포지토리의 파일 및 폴더 크기에서 사용할 수 있습니다.
os.stat().st_size 사용
이 방법에서는 os 모듈의 stat() 함수를 사용할 것입니다. 특정 경로에 대한 많은 정보를 반환합니다.
참고: os.path.getsize() 함수도 작업을 완료합니다. os.stat() 사용의 장점 . st_size 는 simlink를 따르지 않는다는 것입니다.
계속하기 전에 lorem.txt 라는 이름의 테스트 파일을 만들어 보겠습니다. 여기에는 일부 멍청한 텍스트 를 붙여넣을 것입니다. Lorem Ipsum 텍스트 생성기를 방문하여 텍스트를 lorem.txt 파일에 붙여넣을 수 있습니다.
같은 디렉토리에서 이름이 method1.py인 파일을 만들고 아래 코드를 붙여넣습니다.
import os size = os.stat('lorem.txt').st_size print(size)이 코드로 무엇을 하는지 분석해 보겠습니다.
- 첫 번째 줄에서는 os 모듈을 가져옵니다.
- 크기 변수에는 lorem.txt 파일의 크기가 포함됩니다 .
- os.stat() 함수는 파일과 관련된 많은 정보를 반환합니다.
- st_size 속성은 파일의 크기를 나타냅니다.
- 크기 변수를 인쇄합니다.
Python 스크립트를 실행해 보십시오. lorem.txt 파일의 내용에 따라 다른 결과를 얻게 됩니다.
산출:
20064출력은 바이트로 표시됩니다. 이것은 전혀 읽을 수 없으므로 파일 크기를 더 잘 볼 수 있도록 인간화합시다.
먼저 셸에서 다음 명령을 실행하여 humanize 패키지를 설치합니다.
pip install humanize그런 다음 바이트 단위의 값을 읽을 수 있는 파일 크기(예: KB, MB, GB 또는 TB ) 로 변환하는 naturalsize() 함수를 사용할 수 있습니다.
import os from humanize import naturalsize size = os.stat('lorem.txt').st_size print(size) print(naturalsize(size))처음에 위의 코드는 파일 크기를 바이트 단위로 출력한 다음 읽을 수 있는 크기로 결과를 출력합니다.
산출:
20064 20.1 kBPathlib 사용
pathlib는 경로에서만 작동하도록 설계되었지만 다른 모듈의 몇 가지 유용한 기능을 Path 개체(Path 클래스의 인스턴스)의 메서드로 통합합니다.
method2.py 파일을 만들고 Path 클래스를 가져옵니다.
from pathlib import Path그런 다음 lorem.txt 파일의 경로를 인수로 전달하는 Path 개체를 만듭니다.
file_ = Path('lorem.txt')이제 Path 클래스의 stat() 메서드에 액세스할 수 있습니다. os.stat() 함수와 동일하게 작동하므로 파일 크기를 인쇄할 수 있습니다.
print(file_.stat().st_size)산출:
20064보시다시피, 우리는 우리가 사용한 첫 번째 방법과 동일한 결과를 얻었습니다. 위의 결과도 바이트 형식으로 인쇄되므로 humanize 모듈을 사용하여 읽을 수 있습니다.
from pathlib import Path from humanize import naturalsize size = Path('lorem.txt').stat().st_size print(naturalsize(size))이 코드는 다음 출력을 생성합니다.
20.1 kB하위 프로세스와 함께 Unix 명령 사용:
subprocess 모듈을 사용하면 Python에서 하위 프로세스를 호출하고 관리할 수 있습니다. 따라서 우리는 모든 명령을 실행할 수 있고 Python에서 직접 출력을 처리할 수 있습니다.

참고: 이 방법은 Unix OS(Linux, Mac)를 실행하는 경우에만 작동합니다.
method3.py 파일을 열고 아래 코드를 붙여넣습니다.
from subprocess import run process = run(['du', 'lorem.txt'], capture_output=True, text=True) print(process.stdout)이 코드를 살펴보세요.
- 하위 프로세스 모듈에서 실행 기능을 가져옵니다.
- 변수 프로세스는 du lorem.txt 명령을 실행한 결과를 포함합니다.
- du 는 파일의 디스크 공간을 얻을 수 있는 Linux 유틸리티입니다.
- capture_output 은 뛰어난(표준 출력) 속성에 대한 액세스를 제공합니다.
- 텍스트 는 출력을 바이트 대신 문자열로 저장한다는 의미입니다.
- 프로세스의 표준 출력을 인쇄합니다.
위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
20 lorem.txt보시다시피 파일의 크기와 이름을 알려줍니다. 파일 크기만 얻으려면 출력을 분할하고(문자열임을 기억) 첫 번째 요소를 인쇄해야 합니다.
from subprocess import run process = run(['du', 'lorem.txt'], capture_output=True, text=True) size = process.stdout.split()[0] print(size)산출:
20이 출력은 전혀 읽을 수 없습니다. 사용된 측정 단위가 KB임을 유추할 수 있지만(이전 방법으로 인해) 다른 사람은 파일 크기를 추측할 수 없었습니다.
이 문제를 해결하기 위해 -h (사람이 읽을 수 있는) 플래그를 사용할 수 있습니다.
참고: man du 또는 du –help 를 실행하여 이 명령의 설명서를 얻을 수 있습니다.
from subprocess import run process = run(['du', '-h', 'lorem.txt'], capture_output=True, text=True) size = process.stdout.split()[0] print(size)이제 이 스크립트의 출력이 훨씬 더 읽기 쉬워집니다.
20K하위 프로세스 모듈 및 가능한 응용 프로그램에 대해 더 알고 싶다면 Python 하위 프로세스 가이드를 확인하십시오.
재귀적으로 폴더 크기 가져오기
폴더의 크기를 얻으려면 디렉터리와 하위 디렉터리에 있는 각 파일을 반복해야 합니다. 우리는 두 가지 방법으로 그것을 할 것입니다:
- pathlib를 사용하여 경로 반복
- 하위 프로세스와 함께 du 명령 사용
다음 코드는 내 홈 폴더 내의 테스트 디렉토리 경로를 사용합니다. 크기를 얻으려는 디렉토리의 해당 파일 경로를 바꿔야 합니다.
pathlib를 사용하여 경로 반복
파일 크기를 반복하여 디렉토리 크기를 얻는 방법을 살펴보겠습니다.
from pathlib import Path from humanize import naturalsize def get_size(path = '.'): size = 0 for file_ in Path(path).rglob('*'): size += file_.stat().st_size return naturalsize(size) test_path = Path.home() / 'Documents/tests/' print(get_size(test_path))이 코드 조각은 약간 무섭게 보입니다. 각 부분이 하는 일을 분석해 보겠습니다.
- Path 클래스 및 naturalsize() 함수 가져오기
- 기본적으로 현재 디렉토리를 가리키는 경로 매개변수를 사용하여 get_size() 함수를 정의하십시오.
- 크기 변수는 각 파일의 크기를 추가할 자리 표시자일 뿐입니다.
- 경로의 각 파일에 대해 반복
- rglob() 메서드는 패턴과 일치하는 파일을 재귀적으로 반환합니다.
- rglob('*') , 디렉토리 안의 모든 파일을 가져옴을 의미합니다.
- 각 파일의 크기를 가져와 크기 변수에 추가합니다.
- 사람이 읽을 수 있는 방식으로 크기 변수를 반환합니다.
물론 내 컴퓨터에서만 사용할 수 있는 디렉터리로 기능을 테스트하고 있습니다. 컴퓨터에 있는 폴더의 경로를 변경하는 것을 잊지 마십시오.
제 경우에는 다음과 같은 결과가 나타납니다.
403.4 MB하위 프로세스와 함께 du 명령 사용
이 접근 방식에는 몇 가지 장점이 있습니다.
- 결과가 조금 더 정확합니다
- 훨씬 빨라요
from subprocess import run from pathlib import Path test_path = Path.home() / 'Documents/tests/' process = run(['du', '-sh', test_path], capture_output=True, text=True) size = process.stdout.split()[0] print(size)방법 3과 동일한 접근 방식을 사용하고 있지만 이번에는 파일 대신 디렉토리 크기를 가져옵니다.
산출:
481M폴더 크기를 가져오는 이 두 가지 방법을 볼 수 있듯이 은 약간 다른 결과를 반환합니다. 디렉토리가 클수록 차이가 커집니다.
pathlib 또는 하위 프로세스 접근 방식 중에서 선택하는 것은 사용자의 몫 입니다. subprocess를 사용할 때마다 Linux를 사용할 것임을 안다면 pathlib 솔루션을 사용할 수 있습니다.
요약하자면
Python은 OS와 상호 작용할 때 매우 편리합니다. Python으로 프로세스를 자동화하고 많은 시간을 절약할 수 있습니다. os와 상호 작용하는 주요 모듈은 os, sys, 경로 및 하위 프로세스입니다.
이 자습서에서는 다음을 배웠습니다.
- Python이 OS와 상호 작용하는 방법
- 내장 모듈을 사용하여 OS 운영
- Humanize 모듈을 사용하여 사람이 읽을 수 있는 인쇄 방법
- 3가지 접근 방식으로 파일 크기를 계산하려면
- 재귀적으로 또는 du 명령을 사용하여 디렉토리 크기를 계산하려면
