[엑셀-파이썬]사진이름 속 날짜를 추출해 엑셀 시트 리스트에 가로 3장씩 이미지 넣기
** 실제 작업에 반영단계입니다.
질문내용폴더내 사진이 다운로드 되면 이미지 파일이름 중 날짜를 분석해서 날짜별 폴더를 생성해 이미지를 넣어 분류해주고 엑셀 시트 리스트에 날짜와 비교하여 가로로 3장씩 사진을 삽입하는 파이썬 코드를 작성해줘
|
파이선-ChatGPT3.5-엑셀
import os
from datetime import datetime
from PIL import Image
from openpyxl import Workbook
from openpyxl.drawing.image import Image as XLImage
# 함수: 이미지 파일의 날짜를 추출
def extract_date_from_filename(filename):
try:
# 파일 이름에서 날짜를 추출하여 datetime 객체로 변환
date_str = filename.split('_')[1] # 파일 이름에서 날짜 부분 추출
return datetime.strptime(date_str, '%Y%m%d')
except (ValueError, IndexError):
# 파일 이름에서 날짜를 추출할 수 없는 경우
return None
# 함수: 폴더 내 사진을 처리하여 폴더를 생성하고 엑셀 시트에 사진 삽입
def process_photos(folder_path):
# 엑셀 시트 생성
wb = Workbook()
ws = wb.active
# 사진 처리를 위한 변수 초기화
photo_count = 0
current_col = 2 # 첫 번째 열은 헤더이므로 두 번째 열부터 시작
# 폴더 내 파일을 탐색
for filename in os.listdir(folder_path):
if filename.endswith('.jpg') or filename.endswith('.jpeg') or filename.endswith('.png'):
photo_path = os.path.join(folder_path, filename)
photo_date = extract_date_from_filename(filename)
# 파일의 날짜가 올바르게 추출되었는지 확인
if photo_date:
# 날짜별로 폴더 생성
date_str = photo_date.strftime('%Y-%m-%d')
date_folder_path = os.path.join(folder_path, date_str)
os.makedirs(date_folder_path, exist_ok=True)
# 이미지를 날짜별 폴더로 이동
new_photo_path = os.path.join(date_folder_path, filename)
os.rename(photo_path, new_photo_path)
# 엑셀 시트에 날짜 및 사진 삽입
ws.cell(row=1, column=current_col, value=date_str)
img = Image.open(new_photo_path)
xl_img = XLImage(new_photo_path)
ws.add_image(xl_img, f'{chr(65+current_col)}2')
photo_count += 1
# 한 날짜에 3장의 사진이 삽입될 때마다 다음 열로 이동
if photo_count % 3 == 0:
current_col += 1
# 엑셀 파일 저장
excel_file_path = os.path.join(folder_path, 'photos.xlsx')
wb.save(excel_file_path)
print(f"엑셀 파일이 저장되었습니다: {excel_file_path}")
# 주 폴더 경로 설정
folder_path = '/path/to/your/folder'
# 폴더 내 사진 처리
process_photos(folder_path)
이 코드를 실행하기 전에 다음 작업을 수행해야 합니다:
- 코드 내의 folder_path 변수를 실제로 사용하려는 폴더의 경로로 변경합니다.
- 코드를 실행하기 전에 openpyxl 및 Pillow 라이브러리를 설치해야 합니다. 다음 명령을 사용하여 설치할 수 있습니다: pip install openpyxl pillow
이 코드는 주어진 폴더 내의 모든 이미지 파일을 처리하고, 각 이미지의 파일 이름에서 날짜를 추출하여 해당 날짜의 폴더를 만들고, 사진을 해당 폴더로 이동시킵니다. 그런 다음 엑셀 시트에 각각의 사진을 삽입합니다. 각 날짜에는 가로로 3장의 사진이 삽입되며, 날짜별로 다음 열로 이동하여 사진을 삽입합니다. 최종적으로 엑셀 파일이 폴더에 저장됩니다.
댓글