Python에서 특정 디렉토리 내의 .txt 확장자를 가진 파일들을 모두 찾고 싶다면 os.listdir 메서드를 활용할 수 있습니다. 이 메서드는 지정한 디렉토리 안의 모든 파일과 폴더 목록을 반환하며, 여기에 리스트 컴프리헨션을 사용해 파일만 골라내고 확장자를 확인하는 방식으로 원하는 결과를 얻을 수 있습니다.
os.listdir과 endswith 활용하기
다음 예제는 현재 디렉토리(.)에서 파일만 필터링한 뒤, 확장자가 .txt로 끝나는 파일들만 추출하는 코드입니다.
>>> import os
>>> file_list = [f for f in os.listdir('.') if os.path.isfile(os.path.join('.', f)) and f.endswith('.txt')]
>>> print(file_list)
['LICENSE.txt', 'NEWS.txt', 'README.txt']
여기서 endswith는 문자열(str) 클래스의 메서드로, 해당 문자열이 특정 접미사(suffix)로 끝나는지 검사합니다. 또한 os.path.isfile()을 함께 사용해 디렉토리가 아닌 실제 파일만 대상으로 삼는 점이 중요합니다. 이 조건이 없다면 폴더 이름이 .txt로 끝나는 경우까지 포함될 수 있습니다.
glob 모듈 활용하기
같은 작업은 glob 모듈을 사용하면 훨씬 간결하게 처리할 수 있습니다. 와일드카드 패턴(*.txt)을 지정하기만 하면 일치하는 파일 목록이 바로 반환됩니다.
>>> import glob
>>> file_list = [f for f in glob.glob("*.txt")]
>>> print(file_list)
['LICENSE.txt', 'NEWS.txt', 'README.txt']
어떤 방법을 선택해야 할까?
단순히 현재 디렉토리의 특정 확장자 파일만 필요하다면 glob이 코드도 짧고 직관적입니다. 반면 파일과 디렉토리를 구분하는 등 더 세밀한 제어가 필요하거나, 다양한 조건을 조합해 필터링해야 한다면 os.listdir 방식이 유리합니다. 참고로 Python 3.4 이상에서는 pathlib.Path.glob('*.txt')를 사용하는 것도 좋은 대안이며, 하위 디렉토리까지 재귀적으로 탐색하려면 glob.glob('**/*.txt', recursive=True)를 사용하면 됩니다.