본문 바로가기

일::개발

python: 특정 디렉토리 내의 파일 리스트를 얻는 방법

1. 파일명만 필요한 경우

 

os.listdir() 함수를 이용하면 특정한 디렉토리의 파일명 리스트를 쉽게 얻을 수 있다.

 

import os
files = os.listdir(PATH)

 

하지만 이렇게 하면 디렉토리 명도 포함된다. 디렉토리를 제외한 파일의 이름만 얻고 싶으면

 

import os
files = [f for f in os.listdir(PATH) if os.path.isfile(f)]

# files: []

 

이렇게 하면 파이썬스럽게 파일명 리스트가 나올... 것 같지만, isfile()은 full path 를 넣어야 제대로 된 결과가 나온다.

 

import os
files = [f for f in os.listdir(PATH) if os.path.isfile(os.path.join(PATH, f))]

 

결과는 나오지만, 뭔가 코드가 깔끔하지는 않다.

 

 

2. 경로를 포함한 파일명을 얻고 싶은 경우

 

경로를 포함한 파일명의 리스트를 얻고 싶다면, 위의 방법처럼

 

import os
files = [os.path.join(PATH, f) for f in os.listdir(PATH) if os.path.isfile(os.path.join(PATH, f))]

 

이렇게 해주면 원하는 결과가 나오기는 할 것이다.

 

외부 모듈을 쓰지 않으면서 가장 간단하게 처리할 수 있는 방법은 python 3.5 부터 등장한 os.scandir()을 사용하는 것이다.

 

os.scandir(PATH)
> <posix.ScandirIterator object at 0x10c966730>

 

결과를 보면 알겠지만, scandir()은 전체 파일 리스트가 아니라 generator를 반환한다. 파일의 수가 아주 많을 때 성능의 이점을 가질 수 있다.

하지만 그냥 단순한 파일 리스트를 얻고 싶을 때는 간단하게

 

import os
files = [f.path for f in os.scandir(_ftp_download_path) if os.path.isfile(f.path)]

 

이렇게 해주면 된다.