파이썬(Python)은 운영체제(OS)의 지정된 경로에서 파일 이름을 손쉽게 검색할 수 있습니다. 이때 os 모듈의 walk() 함수를 활용하는데, 이 함수는 특정 경로를 입력받아 dirpath(디렉터리 경로), dirnames(디렉터리 이름 목록), filenames(파일 이름 목록)로 구성된 3-튜플(tuple)을 생성합니다.
os.walk()를 활용한 파일 검색 예제
아래 예제는 Windows 환경에서 D:\ 루트 디렉터리를 시작점으로 삼아, smpl.htm이라는 이름의 파일을 찾는 프로그램입니다.
os.walk() 함수는 지정한 디렉터리는 물론 그 안의 모든 하위 디렉터리까지 재귀적으로 탐색하기 때문에, 실행 결과에서 볼 수 있듯이 해당 파일이 메인 디렉터리와 하위 디렉터리 양쪽에 모두 존재함을 확인할 수 있습니다.
예제 코드
import os
def find_files(filename, search_path):
result = []
# 루트 디렉터리부터 위에서 아래로(top-down) 탐색
for root, dir, files in os.walk(search_path):
if filename in files:
result.append(os.path.join(root, filename))
return result
print(find_files("smpl.htm", "D:"))실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
['D:TP\\smpl.htm', 'D:TP\\spyder_pythons\\smpl.htm']
코드 설명
이 코드의 동작 방식을 단계별로 살펴보면 다음과 같습니다.
1. find_files() 함수 정의: 찾고자 하는 파일 이름(filename)과 검색을 시작할 경로(search_path)를 인자로 받습니다.
2. os.walk() 순회: 검색 경로의 각 디렉터리를 순회하면서 현재 위치한 폴더의 경로, 하위 폴더 목록, 파일 목록을 차례로 반환합니다.
3. 파일 존재 여부 확인: 각 디렉터리의 파일 목록에 찾고자 하는 파일 이름이 포함되어 있는지 확인하고, 존재한다면 os.path.join()으로 전체 경로를 만들어 결과 리스트에 추가합니다.
4. 결과 반환: 탐색이 끝나면 발견된 파일들의 전체 경로가 담긴 리스트를 반환합니다.
마무리
이처럼 os.walk() 함수를 사용하면 복잡한 디렉터리 구조 속에서도 원하는 파일을 몇 줄의 코드만으로 빠르게 찾아낼 수 있습니다. 대용량 프로젝트에서 특정 확장자의 파일을 일괄 검색하거나, 로그 파일을 정리할 때 등 다양한 상황에서 유용하게 활용할 수 있으니 꼭 익혀두시기 바랍니다.