인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

조현우님의 프로필 이미지

작성한 질문수

직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피

누름틀을 통해 사진표 삽입 및 사진표 제목 입력하기

하위의 여러 폴더 중 특정폴더의 사진만 추출하기

작성

·

125

·

수정됨

1

안녕하세요. 선생님

저의 질문이 어느 챕터에 해당하는지 알지 못해, 특정 챕터를 지정하지 않은 채 질문 드린 점 양해 부탁드립니다.

 

제가 궁금한 점 및 전제조건은 다음과 같습니다.

  1. 폴더구조(8단계):

     

    main폴더/sub폴더/sub-sub폴더/....../sub_sub_sub....폴더/ 맨 마지막 단계폴더들 중에서 특정 폴더의 사진목록을 추출하고 싶습니다.

  2. 마지막 단계 폴더들 중에서 특정 폴더 :

     

    추출대상 폴더의 경로는 엑셀셀에 명기되어 있긴 합니다.

  3. 이렇게 추출된 사진을 폴더경로단위로 한/컴의 1페이지별 붙여넣기 할 예정입니다.

제가 수강 중인 인프런 강좌를 반복하면서 봐도 잘 해결되지 않네요.

강좌의 섹션 중 '학교명...지역명?' 에서 언듯 해결책을 느낀 것 같았지만 이내 벽에 부딪히게 되어 선생님께 문의 드리는 바 입니다.

좋은 해결 실마리가 있으면 조언 부탁드립니다.

감사합니다.

 

 

 

답변 2

1

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다.
조현우님, 여러 단계로 구성된 폴더 구조에서 특정 폴더의 이미지를 추출하는 과정은 업무 자동화에서 흔히 마주칠 수 있는 문제입니다.

문제 해결 접근 방법

  1. 폴더 구조 탐색: Python의 os 모듈을 활용하여 폴더 경로를 탐색하고, os.walk()를 사용하여 폴더 깊이 탐색을 자동화할 수 있습니다. 각 하위 폴더를 탐색하면서 파일 명을 가져와 이미지 파일만 필터링 할 수 있습니다.
import os

def find_images(target_folder):
    image_files = []
    for root, _, files in os.walk(target_folder):
        for file in files:
            if file.endswith(('.png', '.jpg', '.jpeg')):
                image_files.append(os.path.join(root, file))
    return image_files

target_folder = "main폴더"  # 최상위 폴더 경로
image_list = find_images(target_folder)
print(image_list)
  1. 특정 폴더 선택: 엑셀에 명기된 경로를 사용하여 특정 폴더를 선택하는 방식을 구현할 수 있습니다. pandas 라이브러리를 통해 엑셀 파일을 읽어와 경로 정보를 추출할 수 있습니다.
import pandas as pd

def get_target_folders(excel_file, sheet_name):
    df = pd.read_excel(excel_file, sheet_name=sheet_name)
    return df['폴더경로열'].tolist()  # 엑셀 내 경로가 있는 열

excel_file = '폴더경로.xlsx'
target_folders = get_target_folders(excel_file, 'Sheet1')
  1. 한글 문서 이미지 삽입: 추출된 이미지를 한글 문서에 삽입할 때는 pywin32 모듈을 이용하여 한글과의 연동을 통해 자동화할 수 있습니다.

관련 내용으로 더 많은 정보를 원한다면 다음 예제와 참고 게시물을 살펴보시길 바랍니다:

이 방법을 통해 조현우님께서 원하는 결과를 얻을 수 있기를 바랍니다. 문제의 해결을 위해 추가적인 정보가 필요하시면 언제든지 질문해 주세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

0

일코님의 프로필 이미지
일코
지식공유자

안녕하세요?

어려운 코드는 아니지만, 두 가지 주제로 분리해서 설명을 드려야 할 것 같습니다.

 

① 하위 폴더의 모든 파일과 경로를 파이썬으로 가져오기

현재 폴더의 파일이나 폴더 목록은 os.listdir() 로 간편하게 구할 수 있지만,

하위 폴더의 파일 목록까지 한 번에 구하고 싶으시다면 os.walk() 라는 함수를 쓰시는 것이

훨씬 간편합니다.

 

예를 들어 하위폴더와 파일목록이 아래와 같을 때

{50FBAE9B-F8F0-4CA6-A6CF-7EC66ECF5593}.png

 

아래와 같은 함수를 정의하여 실행하면

(경로명 키를 가진 dict를 정의했습니다. 각 값은 해당 경로의 jpg 파일의 절대경로 리스트입니다.)

import os
def get_jpg_files_by_directory(root_dir="."):
    jpg_dict = {}
    for dirpath, _, filenames in os.walk(root_dir):
        jpg_files = [os.path.abspath(os.path.join(dirpath, f)) for f in filenames if f.lower().endswith(".jpg")]
        if jpg_files:  # 파일이 있는 폴더만 추가
            jpg_dict[dirpath] = jpg_files
    return jpg_dict

결과는 아래와 같습니다.

>>> jpg_files_dict = get_jpg_files_by_directory()
>>> print(jpg_files_dict)

{
'.\\sub1': [
    'C:\\Users\\user\\Desktop\\콘텐츠예제\\이미지경로\\sub1\\A-1.jpg', 
    'C:\\Users\\user\\Desktop\\콘텐츠예제\\이미지경로\\sub1\\A-2.jpg', 
    'C:\\Users\\user\\Desktop\\콘텐츠예제\\이미지경로\\sub1\\A-3.jpg'
        ], 
'.\\sub1\\sub2': [
    'C:\\Users\\user\\Desktop\\콘텐츠예제\\이미지경로\\sub1\\sub2\\B-1.jpg',
    'C:\\Users\\user\\Desktop\\콘텐츠예제\\이미지경로\\sub1\\sub2\\B-2.jpg',
    'C:\\Users\\user\\Desktop\\콘텐츠예제\\이미지경로\\sub1\\sub2\\B-3.jpg'
        ],
'.\\sub1\\sub2\\sub3': [
    'C:\\Users\\user\\Desktop\\콘텐츠예제\\이미지경로\\sub1\\sub2\\sub3\\C-1.jpg',
    'C:\\Users\\user\\Desktop\\콘텐츠예제\\이미지경로\\sub1\\sub2\\sub3\\C-2.jpg',
    'C:\\Users\\user\\Desktop\\콘텐츠예제\\이미지경로\\sub1\\sub2\\sub3\\C-3.jpg'
        ], 
'.\\sub1\\sub2\\sub3\\sub4': [
  'C:\\Users\\user\\Desktop\\콘텐츠예제\\이미지경로\\sub1\\sub2\\sub3\\sub4\\D-1.jpg', 
  'C:\\Users\\user\\Desktop\\콘텐츠예제\\이미지경로\\sub1\\sub2\\sub3\\sub4\\D-2.jpg', 
  'C:\\Users\\user\\Desktop\\콘텐츠예제\\이미지경로\\sub1\\sub2\\sub3\\sub4\\D-3.jpg'
    ]
}

 

위와 같은 데이터구조를 만들면,

하위경로별로 각각의 key가 있고 그 안에 값으로 jpg파일 리스트가 있으므로

순차적으로 이미지를 삽입하기 쉽습니다. (물론 더 효율적인 좋은 방법이 있을 수도 있습니다.)

 

② 아래아한글에 이미지 넣기

아래아한글 API가 다소 복잡하므로, 저는 최근에 거의 항상 pyhwpx 모듈을 이용해서

간단한 명령어들을 처리하고 있습니다.

pyhwpx 모듈에 대한 구체적인 설명은 위키독스(링크)에서 확인하실 수 있습니다.

 

pyhwpx에서는

hwp.create_table(rows, cols, treat_as_char)로 간편하게 표를 생성하고,

hwp.insert_picture(img) 메서드로 셀 안에서 이미지를 삽입하실 수 있습니다.

 

아래는 pyhwpx를 통해 위 이미지 목록을 간단히 hwp 파일에 삽입하는 예시코드입니다.

녹화_2025_03_12_12_38_29_85.gif
for k in jpg_files_dict.keys():
    hwp.set_font(Height=25)  # 글자크기를 25로
    hwp.insert_text(k)  # 경로명 삽입
    hwp.BreakPara()  # 엔터
    hwp.create_table(rows=1, cols=1, treat_as_char=True)  # 1x1의 글자취급표 생성
    for img in jpg_files_dict[k]:  # 경로명 키를 순회하면서 
        hwp.insert_picture(img)  # 경로 내의 jpg파일 삽입
        hwp.TableAppendRow()  # 아래에 새 셀 생성
    hwp.Run("TableSubtractRow")  # 마지막에 생성된 빈 셀은 제거
    hwp.MoveDown()  # 표 아래로 내려가서
    hwp.BreakPage()  # Ctrl-Enter(페이지 나누기)

이런 식으로 활용하실 수 있습니다.

라인별 주석을 참고해주시기 바랍니다.

 

엑셀 파일에 경로가 명시되어 있다면 해당 엑셀파일을 판다스 등으로 가져오셔서

os.walk나 위 dict 자료 대신 활용하시면 더 간편할 것입니다.

부디 도움이 되었길 바랍니다.

 

추가 질문은 댓글로 남겨주세요.

사실, 질문이 조금 두루뭉실한 느낌입니다.
샘플 데이터가 있으면 확실하게 코드로 보여드릴 수 있는데,
아시겠지만ㅜ 제가 똑똑한 편이 아니어서ㅎㅎㅎ
질문 자체를 이해하는 것도 상당한 에너지가 필요하네요ㅜ

행복한 하루 보내시기 바랍니다!

조현우님의 프로필 이미지
조현우
질문자

안녕하세요. 선생님

바쁜 가운데 답을 주셨어 감사합니다.

파이썬 공부가 좀 많이 어렵네요. 그기에 한/글 프로그램에 연동시킬려니....더 힘드네요.

 

말씀처럼 저의 질문이 두루뭉실 하여, 선생님께서 질문의 요지 파악하시기 힘드실거라 충분히 이해합니다.

가르쳐주신 내용을 좀더 연구해 보고 해결되지 않으면 다시 도움 요청 드릴게요.

감사합니다.