-
Python/날짜와 시간으로 사진 이름 변경 - 0. 개요코딩/Python 2024. 1. 18. 19:02728x90
스마트폰 덕분에 사진이 매우 많은데 관리를 하는데는 어려움이 있다. 동영상은 끊어서 저장하는 경우도 많아 파일 이름으로 분류하기가 쉽지 않다. 또한 스마트폰 뿐만 아니라 카메라, 액션캠들에게서 영상과 사진을 가져오면서 분류하기가 더 힘들어졌고, 그 자료들로 앨범이나 다른 자료를 생성할 때 사진의 이름이 뒤죽박죽인 순서대로 자료도 뒤죽박죽이 된다.
그래서 모든 영상과 사진을 생성일자에 따라 관리하기 위해 파일이름을 변경시켜주기로 했다. 많은 양을 수동으로 변경하는 것은 불가능하고, 사진의 경우엔 파일 생성일자와 EXIF 날짜가 달라 일일이 확인하는 것도 불가능하다.
EXIF가 있는 사진은 EXIF 생성일로, 동영상 등은 파일 생성일로 파일이름을 변경하는 프로그램을 만들었다.
이 프로그램은 메인 프로그램 외 2개의 유틸리티 호출 프로그램, 4 개의 서브 프로그램, 3 개의 유틸리티로 구성된다.
유틸리티 호출 프로그램은 EXIF 태그의 키를 참조하기 위한 것과, 파일 이름 변경 시 실수가 발생했을 때 원래의 이름으로 되돌릴 때 사용한다.
4 개의 서브 프로그램은 메인 프로그램이 호출해서 사용한다.
728x90
주어진 디렉토리에서 특정 확장자를 가진 파일들의 목록을 가져오고, 그 파일들의 이름을 임시로 변경한 후, Exif 태그 또는 파일 생성 시간을 기반으로 파일 이름을 변경하는 프로그램이다.
- DATA 딕셔너리:
- 프로그램에 필요한 다양한 설정 값을 저장. 예를 들어, 파일 경로, 지원하는 이미지 및 동영상 확장자, 시간 간격, 날짜 및 시간 형식, 임시 CSV 파일 이름 및 접두어 등.
- 수동 입력이 필요한 변수값은 여기에 모두 저장해서 한 눈에 보면서 변경할 수 있게 했다.
- main 함수:
- 프로그램의 주요 로직이 담긴 함수.
- DATA 딕셔너리에서 필요한 설정 값을 가져와 변수에 할당하고 각 서브 프로그램에 값을 전달한다.
- 파일 목록 가져오기:
- 지원하는 이미지 및 동영상 확장자를 결합하여 총 확장자 리스트를 생성.
- get_files 함수를 사용하여 지정된 디렉토리에서 파일 목록을 가져온다.
Python/날짜와 시간으로 사진 이름 변경 - 1. 파일 목록 가져오기
- 파일 이름 임시 변경:
- rename_tmp 함수를 사용하여 파일 이름을 임시로 변경.
- 변경할 폴더 내에 이미 같은 시간으로 된 파일이 있을 경우 충돌을 피하기 위해 미리 파일들 이름을 고유한 임시값으로 변경.
Python/날짜와 시간으로 사진 이름 변경 - 2. 임시 이름 변경
- 파일 이름 시간으로 변경:
- rename_to_time 함수를 사용하여 파일 이름을 Exif 태그 또는 파일 생성 시간을 기반으로 변경.
Python/날짜와 시간으로 사진 이름 변경 - 3. Exif tag 추출, 파일 생성 시간, Exif tag 종류
이렇게 구성된 main 함수를 호출함으로써 전체 프로그램이 실행. 이 코드는 파일의 이름을 임시로 변경하고, 그 후에 Exif 태그 또는 파일 생성 시간을 기반으로 파일 이름을 변경하는 간단한 워크플로우를 나타낸다.
import os import datetime as dt import exifread import csv DATA = { 'path':'/Users/xxx/Pic', 'image_extensions':['.jpg', '.jpeg', '.png', '.heic'], 'movie_extensions':['.mp4', '.mov'], 'time_delta':1, 'exif_time_format':'%Y:%m:%d %H:%M:%S', # yymmdd hhmmss 'file_name_format':'%y%m%d-%H%M%S', # yymmdd-hhmmss 'exif_date_time_original':'EXIF DateTimeOriginal', 'tmp_csv':'tmp.csv', 'prefix_tmp':'zzz' } def main(): # 입력 데이터 path = DATA['path'] image_extensions = DATA['image_extensions'] movie_extensions = DATA['movie_extensions'] exif_time_format = DATA['exif_time_format'] file_name_format = DATA['file_name_format'] tag_time = DATA['exif_date_time_original'] prefix_tmp = DATA['prefix_tmp'] tmp_csv = DATA['tmp_csv'] time_delta = DATA['time_delta'] # file list extensions = image_extensions + movie_extensions files = get_files(path, extensions) # 파일이름 임시 변경 files = rename_tmp(path, files, tmp_csv, prefix_tmp) # 파일이름 시간으로 변경 rename_to_time(path, files, tag_time, exif_time_format, \ file_name_format, time_delta) main()
728x90'코딩 > Python' 카테고리의 다른 글
Python/애플 사진 .HEIC의 Exif 조작 - ExifTool (0) 2024.01.19 Python/리스트 정렬 (0) 2024.01.18 Python/날짜와 시간으로 사진 이름 변경 - 3.1 유니크한 파일 이름 설정 (0) 2024.01.18 Python/파일을 다루는 두 가지 방식, with... 와 f=open() (0) 2024.01.18 Python/날짜와 시간으로 사진 이름 변경 - 3. Exif tag 추출, 파일 생성 시간, Exif tag 종류 (0) 2024.01.18 - DATA 딕셔너리: