본문 바로가기

Computing@Tip

[엑셀-파이썬]사진이름 속 날짜를 추출해 엑셀 시트 리스트에 가로 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)

 


 

이 코드를 실행하기 전에 다음 작업을 수행해야 합니다:

  1. 코드 내의 folder_path 변수를 실제로 사용하려는 폴더의 경로로 변경합니다.
  2. 코드를 실행하기 전에 openpyxl 및 Pillow 라이브러리를 설치해야 합니다. 다음 명령을 사용하여 설치할 수 있습니다: pip install openpyxl pillow

이 코드는 주어진 폴더 내의 모든 이미지 파일을 처리하고, 각 이미지의 파일 이름에서 날짜를 추출하여 해당 날짜의 폴더를 만들고, 사진을 해당 폴더로 이동시킵니다. 그런 다음 엑셀 시트에 각각의 사진을 삽입합니다. 각 날짜에는 가로로 3장의 사진이 삽입되며, 날짜별로 다음 열로 이동하여 사진을 삽입합니다. 최종적으로 엑셀 파일이 폴더에 저장됩니다.