| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- dataframe
- PySpark
- PostgreSQL
- Kotlin
- array
- Tkinter
- list
- Github
- 파이썬
- GIT
- numpy
- Presto
- SQL
- Apache
- Google Spreadsheet
- django
- hive
- Google Excel
- math
- PANDAS
- Java
- Python
- Excel
- gas
- google apps script
- matplotlib
- c#
- Redshift
- string
- Today
- Total
달나라 노트
Python glob : iglob (폴더 속 폴더 까지 모든 파일 list 추출) 본문
간혹 어떤 기준되는 폴더 안에 있는 모든 파일 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합니다.
즉, 위 예시처럼 폴더가 아닌 어떠한 파일만 출력됩니다.
'Python > Python glob' 카테고리의 다른 글
| Python glob : glob (0) | 2020.11.23 |
|---|