Python에서 특정 디렉토리의 모든 하위 디렉토리를 재귀적으로(하위 디렉토리까지 모두 탐색하여) 목록으로 가져오려면 os.walk 함수를 사용하는 것이 가장 간단합니다.
os.walk로 재귀적으로 하위 디렉토리 찾기
os.walk는 디렉토리 트리를 순회하면서 세 개의 요소(현재 경로, 하위 디렉토리 목록, 파일 목록)로 구성된 튜플을 생성합니다. 이 중 첫 번째 요소가 바로 디렉토리 경로이므로, 이를 활용하면 전체 하위 디렉토리 목록을 쉽게 얻을 수 있습니다.
import os
subdirs = [x[0] for x in os.walk('.')]
print(subdirs)위 코드는 현재 디렉토리('.')를 기준으로 모든 깊이의 하위 디렉토리 경로를 리스트에 담아 출력합니다. 첫 번째 항목은 시작 디렉토리 자신도 포함된다는 점에 유의하세요.
os.listdir과 os.path.isdir로 바로 아래 단계의 디렉토리만 찾기
재귀적 탐색 없이 현재 디렉토리 바로 아래에 있는 디렉토리만 필요하다면, os.listdir로 항목들을 나열한 뒤 os.path.isdir로 필터링하는 방법을 사용할 수 있습니다.
import os d = '.' subdirs = [os.path.join(d, o) for o in os.listdir(d) if os.path.isdir(os.path.join(d, o))]
이 코드는 d 디렉토리 안의 항목 중 실제 디렉토리인 것만 골라서 전체 경로 형태로 리스트를 만듭니다. 파일은 자동으로 제외되며, 결과에는 디렉토리 이름 앞에 경로가 붙어 있어 바로 활용하기 좋습니다.
정리
- 모든 하위 디렉토리(재귀):
os.walk사용 — 깊은 구조까지 한 번에 탐색 가능 - 바로 아래 디렉토리만:
os.listdir+os.path.isdir조합 — 빠르고 가벼운 필터링
상황에 맞게 두 방법을 선택하면 됩니다. 대규모 프로젝트에서는 최신 Python 버전 기준 pathlib.Path.rglob('*')와 is_dir()을 조합하는 방법도 좋은 대안이 될 수 있습니다.