We are Architect

35. 파이썬을 이용한 파일 정리 프로그램 본문

Programing/Python

35. 파이썬을 이용한 파일 정리 프로그램

the best infra 2024. 12. 10. 10:14

 

* 취지 : 

  • 만약 파일을 시간대별로 순번을 매기고 싶다면 어떨까?라는 취지로 만들어 봤다. 하나하나 노가다 하기에는 너무 귀찮지만 프로그램을 이용하면 어떨까? 하는 마음에 공부하면서 만들어 봤다. 

 

 

* 코드 작성 계획

  1.  디렉터리 경로 확보
  2. 디렉터리에 존재하는 파일 및 디렉터리 확인.
  3. 해당 파일들 목록 가져오기(요소 값: 파일이름, 생성시간)
  4. 요소값 대로 sort 정렬하기
  5. 해당 값을 튜플 값으로 가져오고 모든 값을 가져오게 for으로 반복.
    1. 파일의 확장자 분리
    2. 기존 이름에 번호 붙이기 
  6. 프로그램 실행 완료 알림

 

 

* 도구 및 패키지

  • 기본라이브러리 : os 모듈

 

 

* 전체 코드 

import os

def add_number_folder(dir):

  try:
    # 디렉터리 존재 확인.
    if not os.path.exists(dir):
        print("디렉터리가 존재하지 않습니다.")
        return

    # 파일 목록 가져오기
    files = [(file, os.path.getatime(os.path.join(dir, file))) for file in os.listdir(dir)]
    
    # 파일을 수정 시간 기준으로 오름 차순정렬(오래된 파일이 먼저)
    # 리스트 요소에서 첫번째 1번째 요소를 가져온다. 
    # 해당 값을 가지고 키값을 가지고 정렬을 시도한다.
    files.sort(key=lambda x: x[1])

    # 번호를 매겨 이름 변경
    # _ 사용이유는 튜플에서 가져온 생성시간 값 까지는 사용하지 않겠다는 이야기
    for i, (file, _) in enumerate(files, 1):
        file_path = os.path.join(dir, file)

        if os.path.isfile(file_path):
            # 기존 파일명과 확장자 분리
            name, ext = os.path.splitext(file)

            # 새로운 이름 생성: 번호 + 기존이름 + 확장자
            new_name = f"{i}.{name}{ext}"
            new_path = os.path.join(dir, new_name) 
            os.rename(file_path, new_path)
            print(f"'{file}' -> {new_name} 으로 변경됨.")
        
    print(f"'{dir}'폴더의 파일 이름이 모두 변경되었음.")
  except ValueError as e:
     print(f"오류발생! : {e}")

# 프로그램이 직접 실행되었을때 실행.
if __name__ == "__main__":
   # 사용자 입력
   target_dir = input("번호 순서를 매길 파일들이 있는 디렉터리 경로 입력 : ")
   add_number_folder(target_dir)

 

 

 

* 실행 결과

  • 파일이 생성된 시간 순서대로 번호가 매겨졌다.