Programing/Python
35. 파이썬을 이용한 파일 정리 프로그램
the best infra
2024. 12. 10. 10:14
* 취지 :
- 만약 파일을 시간대별로 순번을 매기고 싶다면 어떨까?라는 취지로 만들어 봤다. 하나하나 노가다 하기에는 너무 귀찮지만 프로그램을 이용하면 어떨까? 하는 마음에 공부하면서 만들어 봤다.
* 코드 작성 계획
- 디렉터리 경로 확보
- 디렉터리에 존재하는 파일 및 디렉터리 확인.
- 해당 파일들 목록 가져오기(요소 값: 파일이름, 생성시간)
- 요소값 대로 sort 정렬하기
- 해당 값을 튜플 값으로 가져오고 모든 값을 가져오게 for으로 반복.
- 파일의 확장자 분리
- 기존 이름에 번호 붙이기
- 프로그램 실행 완료 알림
* 도구 및 패키지
- 기본라이브러리 : 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)
* 실행 결과
- 파일이 생성된 시간 순서대로 번호가 매겨졌다.