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)]
이렇게 해주면 된다.