■ 폴더 이름 가져오기
저장소에 있는 파일들의 정보(이름,저장 날짜,파일 사이즈)를 가져오기 위해, 저장된 위치를 알아야 합니다. 파일썬 코드 내부에서 "대상(Target) 폴더"를 직접 입력 하면, 하위 "폴더 이름"만 가져오는 코드를 만들어 봅니다

▶ 파이썬 코드 : 특정 폴더 안에 들어있는 하위 폴더들의 이름만 쏙쏙 골라내는 프로그램
import os
def get_subdirectories_os(target_path):
subdirs = []
try:
# os.scandir은 디렉토리 내부를 효율적으로 탐색합니다.
with os.scandir(target_path) as entries:
for entry in entries:
if entry.is_dir():
subdirs.append(entry.name)
except FileNotFoundError:
print("지정한 폴더를 찾을 수 없습니다.")
return subdirs
# 사용 예시
folder_path = r"C:\Your\Target\Folder" # 본인의 폴더 경로로 수정하세요
folder_names = get_subdirectories_os(folder_path)
print("하위 폴더 목록:")
for name in folder_names:
print(name)
1. 필요한 도구 가져오기 (import os)
| import os |
파이썬으로 컴퓨터의 파일이나 폴더를 다루려면 os라는 기본 도구 상자(패키지)가 필요합니다. import os는 "파이썬아, 운영체제(OS)와 소통할 수 있는 도구 상자(패키지)를 가져와 줘!"라고 명령하는 것입니다.
2. 함수 만들기 (def get_subdirectories_os(target_path))
| def get_subdirectories_os(target_path): subdirs = [] |
- def: 새로운 기능을 하는 함수(상자)를 만들겠다는 뜻입니다.
- get_subdirectories_os: 우리가 만든 함수의 이름입니다. "OS 방식을 사용해서 하위 디렉토리(폴더)를 가져온다"는 의미를 담고 있어요.
- target_path: 괄호 안에 있는 이 친구는 "어떤 폴더를 검사할 건지" 경로를 입력받는 매개변수(입력값)입니다.
- subdirs = []: 나중에 찾아낸 하위 폴더들의 이름을 차곡차곡 담아둘 빈 바구니(리스트)를 준비하는 것입니다.
3. 안전장치 만들기 (try - except)
| try: # 폴더 탐색 코드... except FileNotFoundError: print("지정한 폴더를 찾을 수 없습니다.") |
- 컴퓨터에게 길을 찾아달라고 할 때, 오타가 났거나 실제로 존재하지 않는 폴더 경로를 입력하면 프로그램이 에러를 내며 멈춰버립니다.
- try는 "일단 이 코드를 실행해 봐!"라는 뜻이고, except FileNotFoundError는 "만약 그런 폴더가 없어서 에러가 나면 프로그램이 뻗어버리게 두지 말고, 친절하게 '지정한 폴더를 찾을 수 없습니다'라는 안내 메시지를 보여줘!"라는 안전장치입니다.
4. 폴더 안을 샅샅이 살펴보기 (os.scandir)
with os.scandir(target_path) as entries:
for entry in entries:
if entry.is_dir():
subdirs.append(entry.name)
- os.scandir(target_path): 지정한 폴더 안의 문을 열고 들어가 안에 무엇이 있는지 목록을 쫙 뽑아주는 효율적인 함수입니다. with 문을 쓰면 탐색이 끝난 후 알아서 문을 닫아주어 안전합니다.
- for entry in entries:: 폴더 안에서 발견된 하나하나의 파일이나 폴더들을 (entry라는 이름으로) 반복문으로 순서대로 꺼내 확인합니다.
- if entry.is_dir():: "지금 꺼낸 게 파일이니, 아니면 폴더(directory니)?" 하고 물어보는 조건문입니다. 오직 폴더일 때만 참(True)이 됩니다. (파일은 제외!)
- subdirs.append(entry.name): 폴더가 맞다면, 그 폴더의 이름(entry.name)만 아까 준비해 둔 빈 바구니(subdirs)에 쏙 집어넣습니다(append).
파이썬에서 with ~ as 구문은 프로그램의 자원 관리(Resource Management)를 안전하고 깔끔하게 처리하기 위해 사용하는 문법입니다. 쉽게 말해, "어떤 일을 시작할 때 자동으로 준비(Setup)를 하고, 그 일이 끝나면 (에러가 나든 안 나든) 무조건 뒷정리(Cleanup)를 알아서 해주는 기능"입니다.
5. 결과 돌려주기 (return subdirs)
| return subdirs |
반복문이 끝나고 폴더 이름들이 가득 찬 바구니를 함수 바깥으로 최종적으로 건네주는(반환하는) 역할입니다.
6. 실제로 사용해 보기 (실행부)
| # 사용 예시 folder_path = r"C:\Your\Target\Folder" # 본인의 폴더 경로로 수정하세요 folder_names = get_subdirectories_os(folder_path) print("하위 폴더 목록:") for name in folder_names: print(name) |
- folder_path = r"...": 탐색하고 싶은 내 컴퓨터의 실제 폴더 경로를 적어줍니다. 앞에 붙은 r은 경로 안의 백슬래시(\)를 파이썬이 이상하게 해석하지 않도록 그대로 읽어달라는 특별한 표시입니다.
- folder_names = ...: 아까 만든 함수에 경로를 쏙 집어넣어, 결과로 나온 폴더 이름 리스트를 folder_names 변수에 담습니다.
- 마지막 for문: 바구니에 담긴 폴더 이름들을 하나씩 화면에 예쁘게 출력(print)해 줍니다.
폴더 선택 창(File Dialog) 을 사용하는 방법
Windows 탐색기처럼 폴더 선택 창이 열리고, 마우스로 폴더를 선택할 수 있습니다. 사용자가 경로를 직접 입력할 필요가 없어 실수도 줄어듭니다. tkinter는 별도로 설치할 필요가 없습니다. Python 3.12에서도 기본으로 포함되어 있습니다.
| import tkinter as tk from tkinter import filedialog root = tk.Tk() root.withdraw() folder_path = filedialog.askdirectory(title="검색할 폴더를 선택하세요") print(folder_path) |
import os
import tkinter as tk
from tkinter import filedialog
def get_subdirectories(target_path):
"""
지정한 폴더의 바로 아래 하위 폴더 목록을 반환
"""
subdirs = []
try:
with os.scandir(target_path) as entries:
for entry in entries:
if entry.is_dir():
# os.path.normpath를 사용하여 운영체제에 맞는 경로 형식(윈도우는 \)으로 변환
normalized_path = os.path.normpath(entry.path)
subdirs.append(normalized_path)
except FileNotFoundError:
print("지정한 폴더를 찾을 수 없습니다.")
return []
except PermissionError:
print("폴더에 접근할 권한이 없습니다.")
return []
return sorted(subdirs)
def main():
# Tkinter 창 숨기기
root = tk.Tk()
root.withdraw()
# 항상 위에 표시
root.attributes("-topmost", True)
# 폴더 선택 창
folder_path = filedialog.askdirectory(
title="검색할 폴더를 선택하세요"
)
# 취소 버튼을 누른 경우
if not folder_path:
print("폴더 선택이 취소되었습니다.")
return
print("=" * 60)
print("선택한 폴더")
print(folder_path)
print("=" * 60)
folder_names = get_subdirectories(folder_path)
if len(folder_names) == 0:
print("하위 폴더가 없습니다.")
else:
print(f"하위 폴더 ({len(folder_names)}개)")
print("-" * 60)
for i, name in enumerate(folder_names, start=1):
print(f"{i:3d}. {name}")
if __name__ == "__main__":
main()
subdirs.append(entry.name) ➔ subdirs.append(entry.path)
기존에는 폴더 이름(예: project_a)만 리스트에 담았지만, entry.path로 변경함으로써 예시로 주신 것처럼 d:\cad\project_a 형태의 절대 경로가 리스트에 담기게 됩니다.
실행 결과 예 : 예를 들어 선택한 폴더가 G:\00PythonProjects
| 폴더 구조 | 콘솔 |
| G:\00PythonProjects │ ├─ Project_A ├─ Project_B ├─ PythonStudy ├─ Image └─ Temp |
============================================================ 선택한 폴더 G:\00PythonProjects ============================================================ 하위 폴더 (5개) ------------------------------------------------------------ 1. Image 2. Project_A 3. Project_B 4. PythonStudy 5. Temp |
이 코드를 확장하여 선택한 폴더 아래의 모든 하위 폴더를 재귀적으로 탐색하고, .prt, .asm, .drw 파일만 찾아 CSV나 TXT로 저장하는 기능을 추가 가능 합니다. 저장된
by korealionkk@gmail.com
'업무 자동화 > python' 카테고리의 다른 글
| 파이썬 학습] 사전(Dictionary) (0) | 2026.08.04 |
|---|---|
| 분석.csv → 판단 프로그램 만들기 (0) | 2026.08.03 |
| 기본 데이터.csv → 분석 데이터로 계산 하기 (0) | 2026.08.03 |
| 특정 종목의 기본 데이터 가져오기 (0) | 2026.08.03 |
| 파이썬 학습] 리스트 활용 (0) | 2026.08.03 |