ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 :
      • 패턴(와일드카드) 기반 파일 검색

    세 모듈을 함께 쓰면,
    “폴더 구조 만들기 → 특정 파일만 모아 복사 → 오래된 파일 정리” 같은 작업을
    손으로 클릭할 필요 없이 파이썬 스크립트로 자동화할 수 있습니다.

Designed by Tistory.