강의

멘토링

로드맵

Inflearn brand logo image

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

조현우님의 프로필 이미지
조현우

작성한 질문수

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

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

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

작성

·

167

·

수정됨

1

안녕하세요. 선생님

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

 

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

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

     

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

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

     

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

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

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

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

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

감사합니다.

 

 

 

답변 2

1

안녕하세요, 인프런 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 자료 대신 활용하시면 더 간편할 것입니다.

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

 

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

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

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

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

안녕하세요. 선생님

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

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

 

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

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

감사합니다.

조현우님의 프로필 이미지
조현우

작성한 질문수

질문하기