-
[Python] 파일·폴더 자동화: os + shutil + glob 핵심 정리업무 자동화/Python 2025. 12. 3. 08:00
1. os 모듈 기본: 경로와 환경
1-1. 현재 작업 디렉터리 확인·변경
import os print(os.getcwd()) # 현재 작업 디렉터리 os.chdir("C:/temp") # 작업 디렉터리 변경 (Windows 예시) print(os.getcwd())스크립트를 어디에서 실행했는지, 상대 경로 기준이 어디인지 확인할 때 자주 사용.
1-2. 디렉터리 생성 / 목록 조회
import os # 디렉터리 생성 os.makedirs("output/reports/2025", exist_ok=True) # 디렉터리 내 파일/폴더 리스트 for name in os.listdir("output"): print(name)os.makedirs(..., exist_ok=True)→ 중간 경로까지 한 번에 생성, 이미 있어도 에러 X
1-3. 파일/폴더 존재 여부
import os path = "data/input.csv" print(os.path.exists(path)) # 존재 여부 print(os.path.isfile(path)) # 파일 여부 print(os.path.isdir(path)) # 폴더 여부1-4. 환경 변수 읽기
import os home = os.environ.get("HOME", "") print("HOME:", home)- 운영체제 환경변수에서 API 키, 기본 경로 등을 읽어오는 데 활용.
2. shutil 모듈: 복사, 이동, 삭제, 압축
2-1. 파일 복사
import shutil shutil.copy("data/input.csv", "backup/input_copy.csv")copy(src, dst): 내용 + 퍼미션 일부 복사copy2(src, dst): 메타데이터(수정 시간 등)까지 최대한 보존
2-2. 폴더 전체 복사
import shutil shutil.copytree("data", "backup/data_backup", dirs_exist_ok=True)dirs_exist_ok=True(Python 3.8+) → 대상 폴더가 있어도 진행
2-3. 파일/폴더 이동
import shutil shutil.move("output/report.xlsx", "archive/2025/report.xlsx")- 드라이브 안에서는 rename, 다른 드라이브면 copy 후 삭제처럼 동작
2-4. 폴더 통째 삭제
import shutil shutil.rmtree("output/tmp") # 주의: 안에 파일 있어도 전부 삭제- 테스트/캐시 폴더 정리할 때 활용
2-5. 압축(zip/tar) 만들기·풀기
import shutil # 폴더를 zip으로 압축 shutil.make_archive("backup_2025", "zip", root_dir="data") # 압축 풀기 shutil.unpack_archive("backup_2025.zip", extract_dir="restored")3. glob 모듈: 패턴으로 파일 찾기
3-1. 기본 사용법
import glob # 현재 폴더의 .csv 파일 리스트 csv_files = glob.glob("*.csv") print(csv_files)- 와일드카드 패턴:
*: 아무 문자열?: 문자 1개**: 하위 디렉터리 재귀 탐색(파이썬 3.5+)
3-2. 하위 폴더까지 모두 찾기
import glob # data/ 아래의 모든 .log 파일 재귀 검색 log_files = glob.glob("data/**/*.log", recursive=True) for path in log_files: print(path)3-3. 특정 이름 패턴 찾기
import glob # report_YYYY_MM.csv 형식 monthly_reports = glob.glob("output/report_2025_*.csv")4. 실무 예시
4-1. 오늘 날짜 폴더에 결과 저장
import os from datetime import date today = date.today().strftime("%Y%m%d") base_dir = os.path.join("output", today) os.makedirs(base_dir, exist_ok=True) result_path = os.path.join(base_dir, "summary.txt") with open(result_path, "w", encoding="utf-8") as f: f.write("오늘 리포트 내용 요약...\n") print("저장 위치:", result_path)4-2. 특정 확장자만 백업 폴더로 복사
import glob import os import shutil src_dir = "data" dst_dir = "backup" os.makedirs(dst_dir, exist_ok=True) for path in glob.glob(os.path.join(src_dir, "*.csv")): filename = os.path.basename(path) dst_path = os.path.join(dst_dir, filename) shutil.copy(path, dst_path) print(f"{path} -> {dst_path}")4-3. 7일 이상 된 로그 파일 삭제
import glob import os import time log_dir = "logs" now = time.time() days = 7 threshold = now - days * 24 * 60 * 60 for path in glob.glob(os.path.join(log_dir, "*.log")): mtime = os.path.getmtime(path) if mtime < threshold: print("삭제:", path) os.remove(path)5. 정리
os:- 현재 경로, 디렉터리/파일 존재 체크, 환경변수, 경로 조합 등
shutil:- 파일/폴더 복사, 이동, 삭제, 압축
glob:- 패턴(와일드카드) 기반 파일 검색
세 모듈을 함께 쓰면,
“폴더 구조 만들기 → 특정 파일만 모아 복사 → 오래된 파일 정리” 같은 작업을
손으로 클릭할 필요 없이 파이썬 스크립트로 자동화할 수 있습니다.'업무 자동화 > Python' 카테고리의 다른 글
[Python] datetime + time: 날짜·시간 처리 베스트 프랙티스 (0) 2025.12.05 [Python] collections + itertools: 코딩테스트·실무에 유용한 도구 모음 (0) 2025.12.04 [Python] random 함수 정리: 난수 생성, 샘플링, 셔플 핵심 사용법 (0) 2025.12.01 [Python] sys 표준 라이브러리: 인터프리터, 경로, 입출력 제어 (0) 2025.11.29 [Python] pathlib: OS 독립적인 파일·디렉터리 경로 다루기 (0) 2025.11.27