Python 표준 라이브러리 os를 사용하여 파일의 크기(용량) 또는 디렉터리에 포함된 파일의 전체 크기를 얻을 수 있습니다.
다음 세 가지 방법을 설명합니다. 얻을 수 있는 크기의 단위는 모두 바이트입니다.
- 파일 크기 가져오기:
os.path.getsize()
- 다음 기능을 결합하여 디렉토리 크기 가져오기(Python 3.5 이상):
os.scandir()
- 다음 함수를 결합하여 디렉터리 크기를 가져옵니다(Python 3.4 이하).:
os.listdir()
파일 크기 가져오기:os.path.getsize()
파일의 크기(용량)는 os.path.getsize()로 얻을 수 있습니다.
크기를 얻으려는 파일의 경로를 인수로 지정하십시오.
import os
print(os.path.getsize('data/src/lena_square.png'))
# 473831
디렉토리(폴더)의 크기 가져오기:os.scandir()
디렉토리(폴더)에 포함된 파일의 전체 크기를 계산하려면 os.scandir()을 사용하십시오.
이 함수는 Python 3.5에 추가되었으므로 이전 버전에서는 os.listdir()을 사용합니다. os.listdir() 예제는 나중에 설명합니다.
다음과 같이 함수를 정의합니다.
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('data/src'))
# 56130856
os.scandir()은 os.DirEntry 객체의 반복자를 반환합니다.
DirEntry 개체에서 is_file() 및 is_dir() 메서드를 사용하여 파일인지 디렉터리인지 확인합니다. 파일인 경우 stat_result 객체의 st_size 속성에서 크기를 얻는다. 디렉터리의 경우 이 함수를 재귀적으로 호출하여 모든 크기를 더하고 전체 크기를 반환합니다.
또한 기본적으로 is_file()은 파일에 대한 심볼릭 링크에 대해 TRUE를 반환합니다. 또한 is_dir()은 디렉토리에 대한 심볼릭 링크에 대해 true를 반환합니다. 심볼릭 링크를 무시하려면 is_file() 및 is_dir()의 follow_symlinks 인수를 false로 설정하십시오.
또한 하위 디렉터리를 탐색할 필요가 없으면 다음 부분만 삭제하면 됩니다.
elif entry.is_dir():
total += get_dir_size(entry.path)
파일의 경로가 인수로 전달되면 위의 함수는 실패합니다. 파일이나 디렉토리의 크기를 반환하는 함수가 필요한 경우 다음과 같이 작성할 수 있습니다.
def get_size(path='.'):
if os.path.isfile(path):
return os.path.getsize(path)
elif os.path.isdir(path):
return get_dir_size(path)
print(get_size('data/src'))
# 56130856
print(get_size('data/src/lena_square.png'))
# 473831
디렉토리(폴더)의 크기 가져오기:os.listdir()
Python 3.4 또는 이전 버전에는 os.scandir()이 없으므로 os.listdir()을 사용하십시오.
다음과 같이 함수를 정의합니다.
def get_dir_size_old(path='.'):
total = 0
for p in os.listdir(path):
full_path = os.path.join(path, p)
if os.path.isfile(full_path):
total += os.path.getsize(full_path)
elif os.path.isdir(full_path):
total += get_dir_size_old(full_path)
return total
print(get_dir_size_old('data/src'))
# 56130856
기본 아이디어는 os.scandir()의 경우와 동일합니다.
os.listdir()로 얻을 수 있는 것은 파일 이름(디렉토리 이름)의 목록입니다. 각 파일 이름 또는 디렉토리 이름은 전체 경로를 생성하기 위해 os.path.join()을 사용하여 상위 디렉토리의 경로와 결합됩니다.
대상이 심볼릭 링크인 경우 os.path.isfile() 및 os.path.isdir()이 엔터티를 판단합니다. 따라서 기호 링크를 무시하려면 기호 링크에 대해 true를 반환하는 os.path.islink()와 함께 조건부 판단을 사용하십시오.
os.scandir()의 경우와 같이 하위 디렉토리를 순회할 필요가 없다면 다음 부분만 삭제하면 됩니다.
elif os.path.isdir(full_path):
total += get_dir_size_old(full_path)
파일의 경로가 인수로 전달되면 위의 함수는 실패합니다. 파일이나 디렉토리의 크기를 반환하는 함수가 필요한 경우 다음과 같이 작성할 수 있습니다.
def get_size_old(path='.'):
if os.path.isfile(path):
return os.path.getsize(path)
elif os.path.isdir(path):
return get_dir_size_old(path)
print(get_size_old('data/src'))
# 56130856
print(get_size_old('data/src/lena_square.png'))
# 473831