Python에서는 os.walk 함수를 사용해 디렉토리 트리를 손쉽게 순회할 수 있습니다. 이 함수는 지정한 최상위 디렉토리부터 시작해 하위 폴더까지 재귀적으로 탐색하며, 각 단계마다 현재 경로, 하위 디렉토리 목록, 파일 목록을 차례로 반환합니다.
예제
import os
for dirpath, dirs, files in os.walk("./my_directory/"):
for filename in files:
fname = os.path.join(dirpath, filename)
with open(fname) as myfile:
print(myfile.read())
위 프로그램은 my_directory 트리 전체를 재귀적으로 순회하며, 발견한 모든 파일의 내용을 콘솔에 출력합니다.
os.walk의 동작 방식
os.walk는 반복할 때마다 다음 세 가지 값을 반환합니다.
- dirpath: 현재 탐색 중인 디렉토리의 경로 문자열입니다.
- dirs: 해당 디렉토리 안에 있는 하위 디렉토리 이름 목록입니다.
- files: 해당 디렉토리 안에 있는 일반 파일 이름 목록입니다.
os.walk는 기본적으로 상단에서 하단(top-down) 방향으로 탐색합니다. 만약 하위 디렉토리를 먼저 처리하고 싶다면 topdown=False 옵션을 지정하면 됩니다.
pathlib를 활용한 대안
Python 3.4 이상에서는 객체 지향적인 경로 처리가 가능한 pathlib 모듈을 사용하는 것도 좋은 선택입니다.
from pathlib import Path
for path in Path("./my_directory").rglob("*"):
if path.is_file():
with open(path) as myfile:
print(myfile.read())
Path.rglob("*")는 모든 하위 항목을 재귀적으로 찾아주므로, 코드가 더 간결하고 가독성이 높아집니다. 상황에 맞게 두 방식을 골라 사용하면 됩니다.