달나라 노트

Python glob : iglob (폴더 속 폴더 까지 모든 파일 list 추출) 본문

Python/Python glob

Python glob : iglob (폴더 속 폴더 까지 모든 파일 list 추출)

CosmosProject 2026. 1. 3. 14:22
728x90
반응형

 

 

 

간혹 어떤 기준되는 폴더 안에 있는 모든 파일 list를 얻고 싶을 때가 있습니다.

근데 단순히 어떤 폴더 안에 담긴 것이 아니라 폴더 속 폴더 속 폴더 속의 파일 같이 다중으로 구성된 directory의 모든 파일 리스트를 얻고싶을 때가 있죠.

이때는 iglob를 사용하면 유용합니다.

 

 

glob.iglob(directory, recursive=True/False)

 

사용법은 위와 같습니다.

잘 모르겠으니 예시를 통해서 알아봅시다.

 

 

예시에서의 목적은 다음과 같습니다.

"내가 원하는 폴더 안에 있는 모든 파일과, 모든 폴더 속에 담긴 파일까지 모두 return하라."

 

 

import glob


# 기준 folder
root_path = '/Users/Documents/code/pythonProject/**'  # 1

# iglob는 list가 아닌 iterator를 생성함
filter_iterator = glob.iglob(root_path, recursive=True)  # 2

print(type(filter_iterator))  # 3

# for loop를 통해 iterator로부터 출력되는 모든 값 출력
for f in filter_iterator:  # 4
    print(f)


-- Result
<class 'generator'>

/Users/Documents/code/pythonProject/
/Users/Documents/code/pythonProject/h_2.py
/Users/Documents/code/pythonProject/turtle_test
/Users/Documents/code/pythonProject/turtle_test/turtle_test.py
/Users/Documents/code/pythonProject/test_keyboard_control.py
/Users/Documents/code/pythonProject/browser_control.py
/Users/Documents/code/pythonProject/img_black.png
/Users/Documents/code/pythonProject/imgs
/Users/Documents/code/pythonProject/imgs/스크린샷 2025-08-31 오전 7.37.42.png
/Users/Documents/code/pythonProject/imgs/스크린샷 2025-08-31 오전 7.44.53.png
/Users/Documents/code/pythonProject/pdf
/Users/Documents/code/pythonProject/pdf/testing.pdf
/Users/Documents/code/pythonProject/test.py
/Users/Documents/code/pythonProject/gemini_test.py
/Users/Documents/code/pythonProject/main.py
/Users/Documents/code/pythonProject/h_1.py
/Users/Documents/code/pythonProject/sample_capture.png

 

1. root_path 지정

여기 적힌 경로에 담긴 모든 파일과 폴더 리스트를 출력할 예정입니다.

여기서 주의할 점은 '/Users/Documents/code/pythonProject/**' 이렇게 directory의 가장 끝에 asterisk를 2개 ** 적어야 한다는 것입니다.

 

'/Users/Documents/code/pythonProject/*' 처럼 *를 한개만 적으면 다른 결과가 나옵니다.

 

'/Users/Documents/code/pythonProject/*' -> /Users/Documents/code/pythonProject/ 폴더 바로 안에 있는 것만 스캔함

'/Users/Documents/code/pythonProject/**' -> /Users/Documents/code/pythonProject/ 폴더 바로 안에 있는 것과 폴더 속 폴더 까지도 모두 스캔함

 

이렇게 * 2개를 적어야 폴더 속 폴더까지 모두 탐색하라는 pattern을 의미합니다.

 

 

2. iglob iterator 생성

iglob는 list가 아닌 iterator를 생성합니다.

그래서 특정 디렉토리에 폴더나 파일이 너무 많아도 용량이 매우 큰 list가 생성되지 않는다는 장점이 있습니다.

 

 

3. 생성된 iterator 확인

 

 

4. for loop를 통해 iterator를 실행하여 folder, file 출력

결과를 보면 /Users/Documents/code/pythonProject/ 폴더 안에 있는 모든 파일과 폴더 속 폴더까지 모두 출력됩니다.

또한 파일도 단순히 python file이 아니라 이미지, pdf등 존재하는 모든 것이 출력됩니다.

 

 

 

 

근데 위 결과는 기준 경로 안에 있는 파일과 폴더까지 모두 출력됩니다.

만약 파일만 출력하고 싶으면 어떻게 할까요?

이땐 os.path.isfile를 같이 이용하면 됩니다.

 

import glob
import os

# 기준 folder
root_path = '/Users/robin/Documents/code/pythonProject/**'

# iglob는 list가 아닌 iterator를 생성함
filter_iterator = glob.iglob(root_path, recursive=True)

print(type(filter_iterator))

# for loop를 통해 iterator로부터 출력되는 모든 값 출력
for f in filter_iterator:
    if os.path.isfile(f):  # 단, file일 때만 출력 (폴더는 출력하지 않음)
        print(f)


-- Result
<class 'generator'>

/Users/Documents/code/pythonProject/h_2.py
/Users/Documents/code/pythonProject/turtle_test/turtle_test.py
/Users/Documents/code/pythonProject/test_keyboard_control.py
/Users/Documents/code/pythonProject/browser_control.py
/Users/Documents/code/pythonProject/img_black.png
/Users/Documents/code/pythonProject/imgs/스크린샷 2025-08-31 오전 7.37.42.png
/Users/Documents/code/pythonProject/imgs/스크린샷 2025-08-31 오전 7.44.53.png
/Users/Documents/code/pythonProject/pdf/testing.pdf
/Users/Documents/code/pythonProject/test.py
/Users/Documents/code/pythonProject/gemini_test.py
/Users/Documents/code/pythonProject/main.py
/Users/Documents/code/pythonProject/h_1.py
/Users/Documents/code/pythonProject/sample_capture.png

 

os.path.isfile() method는 주어진 경로가 file이면 True, file이 아니면 False를 return합니다.

즉, 위 예시처럼 폴더가 아닌 어떠한 파일만 출력됩니다.

 

 

 

 

 

 

 

 

 

728x90
반응형

'Python > Python glob' 카테고리의 다른 글

Python glob : glob  (0) 2020.11.23
Comments