Python에서 파일 및 폴더 크기를 확인하는 방법은 무엇입니까?

이 기사에서는 Python에서 파일 또는 폴더의 크기를 확인하는 방법을 배웁니다.

파이썬은 가장 다재다능한 프로그래밍 언어 중 하나입니다. 이를 통해 작은 CLI(Command-line interface) 프로그램에서 복잡한 웹 애플리케이션으로 빌드할 수 있습니다.

그러나 가장 과소평가된 기능 중 하나는 운영 시스템과 상호 작용하는 기능입니다. 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에 따라 출력이 다릅니다. 일반적으로 가장 일치하는 항목은 유닉스 그리고 파이썬.

  PSN 계정에 로그인하는 방법

이제 Python이 OS와 상호 작용하는 방식을 빠르게 파악했으므로 파일 및 폴더 크기를 확인하는 방법으로 넘어가겠습니다. 다음 솔루션은 모두 다음에서 사용할 수 있습니다. Python의 파일 및 폴더 크기 GitHub 저장소

os.stat().st_size 사용

이 방법에서는 다음을 사용합니다. 통계() os 모듈의 함수. 특정 경로에 대한 많은 정보를 반환합니다.

참고: os.path.getsize() 함수도 작업을 완료합니다. os.stat().st_size 사용의 이점은 심링크를 따르지 않는다는 것입니다.

계속하기 전에 lorem.txt라는 이름의 테스트 파일을 만들어 봅시다. 이 파일에 멍청한 텍스트를 붙여넣을 것입니다. 우리는 방문할 수 있습니다 Lorem Ipsum 텍스트 생성기 텍스트를 lorem.txt 파일에 붙여넣습니다.

동일한 디렉토리에서 method1.py라는 파일을 만들고 아래 코드를 붙여넣습니다.

import os
size = os.stat('lorem.txt').st_size
print(size)

이 코드로 수행하는 작업을 분석해 보겠습니다.

  • 첫 번째 줄에서 os 모듈을 가져옵니다.
  • size 변수에는 lorem.txt 파일의 크기가 포함됩니다.
    • os.stat() 함수는 파일과 관련된 많은 정보를 반환합니다.
    • st_size 속성은 파일의 크기를 나타냅니다.
  • 크기 변수를 인쇄합니다.

Python 스크립트를 실행해 봅니다. lorem.txt 파일의 내용에 따라 다른 결과를 얻게 됩니다.

산출:

20064

출력은 바이트로 표시됩니다. 이것은 전혀 읽을 수 없으므로 인간화하여 파일 크기를 더 잘 파악할 수 있도록 합시다.

먼저 설치 인간화하다 셸에서 다음 명령을 실행하여 패키지를 엽니다.

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 kB

Pathlib 사용

하지만 경로 라이브러리 경로에서만 작동하도록 설계되었으며 다른 모듈의 몇 가지 유용한 기능을 Path 개체(Path 클래스의 인스턴스)의 메서드로 통합합니다.

method2.py 파일을 생성하고 경로 클래스.

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에서 직접 출력을 처리할 수 있습니다.

  Windows가 여전히 드라이브에 문자를 사용하는 이유는 무엇입니까?

참고: 이 방법은 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() 함수를 정의합니다.
  • 크기 변수는 각 파일의 크기를 추가할 자리 표시자일 뿐입니다.
  • 경로의 각 파일을 반복합니다.
  • 각 파일의 크기를 가져와 size 변수에 추가합니다.
  • 사람이 읽을 수 있는 방식으로 크기 변수를 반환합니다.
  Android에서 Pokémon Go 오류 26 수정

물론 내 컴퓨터에서만 사용할 수 있는 디렉토리로 기능을 테스트하고 있습니다. 컴퓨터에 있는 폴더의 경로를 변경하는 것을 잊지 마십시오.

제 경우에는 다음과 같은 결과가 나타납니다.

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 또는 하위 프로세스 접근 방식 중에서 선택하는 것은 사용자에게 달려 있습니다. 하위 프로세스를 사용할 때마다 Linux를 사용한다는 것을 알고 있다면 pathlib 솔루션을 사용할 수 있습니다.

요약하자면

Python은 OS와 상호 작용할 때 매우 편리합니다. Python으로 프로세스를 자동화하고 많은 시간을 절약할 수 있습니다. os와 상호 작용하는 주요 모듈은 os, sys, path 및 subprocess입니다.

이 자습서에서는 다음을 배웠습니다.

  • Python이 OS와 상호 작용하는 방법
  • OS 작동을 위한 내장 모듈 사용
  • humanize 모듈을 사용하여 사람이 읽을 수 있는 인쇄 방법
  • 3가지 접근 방식으로 파일 크기를 계산하려면
  • 재귀적으로 또는 du 명령을 사용하여 디렉토리 크기를 계산하려면