하위 디렉토리의 모든 파일 개수를 세는 방법에 대해서 알아보겠습니다.

1. os.walk()를 이용한 방법

os.walk(dir)는 dir 디렉토리 하위의 모든 파일 및 폴더를 순회하면서 파일 이름 등의 정보를 전달합니다.

  • for _, _, files in os.walk(dir_path) : 특정 디렉토리 아래의 파일들이 files 리스트로 전달됨, 리스트의 개수를 더하여 전체 파일 개수를 셈
import os

dir_path = '/home/js/IdeaProjects'

file_count = 0
for _, _, files in os.walk(dir_path):
    file_count += len(files)

print(f"파일 개수: {file_count}")

Output:

파일 개수: 98

2. glob()을 이용한 방법

glob()은 인자로 전달된 경로의 하위 파일 리스트를 리턴합니다. 리스트의 개수를 세서 파일 개수를 확인할 수 있습니다.

  • glob에서 **는 하위 디렉토리 및 파일의 경로를 가져와서 리스트로 리턴
  • .으로 시작하는 숨겨진 파일들은 가져오지 않음
import glob
import os

dir_path = '/home/js/IdeaProjects/python-ex'

file_list = glob.glob(os.path.join(dir_path, '**'), recursive=True)
print(file_list)
file_count = len(file_list)

print(f"파일 개수: {file_count}")

Output:

파일 개수: 94

디렉토리가 아닌, 파일 개수만 세기

glob은 디렉토리와 파일의 전체 경로를 리스트로 리턴하기 때문에, 아래와 같이 isfile()로 파일만 분류하여 개수를 셀 수 있습니다.

import glob
import os

dir_path = '/home/mjs/IdeaProjects/python-ex'

file_list = glob.glob(os.path.join(dir_path, '**'), recursive=True)
print(file_list)
file_count = len([f for f in file_list if os.path.isfile(f)])

print(f"파일 개수: {file_count}")

3. os.listdir()을 이용한 방법

os.listdir(dir)는 dir의 하위 파일들을 리스트로 리턴합니다.

  • .으로 시작하는 숨겨진 파일들도 가져옴
  • 디렉토리의 하위 폴더, 파일만 가져오고, 하위 폴더의 하위 파일들은 가져오지 않음, 하위 폴더의 하위 파일도 개수를 세야한다면, 그 하위 폴더에 대해서 listdir()로 파일을 가져와서 개수를 세야함
  • item_path 처럼 파일 path를 만들 수 있기 때문에, 디렉토리가 아닌 파일의 개수만 세려면 os.path.isfile(item_path)로 파일인지 확인하여 파일만 셀 수 있음
import os

dir_path = '/home/mjs/IdeaProjects/python-ex'
file_count = 0

all_items = os.listdir(dir_path)
for item in all_items:
    item_path = os.path.join(dir_path, item)
    file_count += 1

print(f"파일 개수: {file_count}")

Output:

파일 개수: 94