개요
특정 경로 내 파일과 디렉터리 목록을 확인하고자 한다. 사용할 수 있는 방법을 정리해둔다.
os.listdir(path)
os.listdir 함수는 매개변수로 전달받은 경로 내의 파일과 디렉터리의 리스트를 반환한다. 매개변수가 없으면 현재 디렉터리를 기준으로 실행된다.
import os
base_path = './'
list_file = os.listdir(base_path)
print("\n".join(list_file))
파일 탐색기에서 보이는 결과와 동일한지 확인해보자.
다만 listdir은 단순히 디렉터리 내 파일과 디렉터리에 대한 문자열 리스트만을 반환하기 때문에 해당 요소가 파일인지 디렉터리인지 용량은 얼마인지 등의 추가적인 정보를 확인하기에는 부족한 면이 있다.
따라서 Python 3.5 이후의 버전에서는 scandir 함수를 사용할 수 있다.
os.scandir(path)
os.scandir 함수는 매개변수로 전달받은 경로 내의 파일과 디렉터리 엔트리인 os.DirEntry 형의 iterator를 반환한다. DirEntry 클래스는 name, path 속성과 inode(), is_dir(), is_file(), is_symlink(), stat() 함수를 지원한다.
매개변수가 없으면 현재 디렉터리를 기준으로 실행된다. interator는 scandir.close 함수로 닫아주어야 하기 때문에 with 구문과 함께 사용하는 것을 권한다.
import os
base_path = './'
# list_file = os.listdir(base_path)
with os.scandir(base_path) as it:
for entry in it:
print(f"{entry.name}\t{entry.path}")
+ .py로 끝나는 파일의 이름과 추가 정보(stat_result)를 확인해보자.
import os
base_path = './'
with os.scandir(base_path) as it:
for entry in it:
if entry.is_file() and entry.name.endswith('.py'):
print(f"{entry.path}\t{entry.stat()}")
Window OS의 경우 st_ino, st_dev, st_nlink 속성은 항상 0이다.
st_size는 파일의 바이트 단위 크기, st_atime, st_mtime, st_ctime은 각각 마지막 접근 시간, 마지막 수정 시간, 생성 시간에 해당한다.
참고 문서
https://docs.python.org/3/library/os.html