Python

[Python] 디렉터리 내 파일/디렉터리 리스트 확인 - 1

비번변경 2022. 10. 16. 19:19

개요

특정 경로 내 파일과 디렉터리 목록을 확인하고자 한다. 사용할 수 있는 방법을 정리해둔다.

 

 

 

os.listdir(path)

os.listdir 함수는 매개변수로 전달받은 경로 내의 파일과 디렉터리의 리스트를 반환한다. 매개변수가 없으면 현재 디렉터리를 기준으로 실행된다.

import os

base_path = './'
list_file = os.listdir(base_path)
print("\n".join(list_file))

listdir

파일 탐색기에서 보이는 결과와 동일한지 확인해보자.

파일 탐색기와 비교

다만 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}")

scandir

 

+ .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