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

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

류금열님의 프로필 이미지
류금열

작성한 질문수

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

(서식 체크를 위해) 특정폰트 외의 모든 폰트를 빨갛게 일괄변경하는 방법

한 파일의 변경사항을 다수의 파일에 동일하게 반영하고 싶습니다.

해결된 질문

작성

·

20

1

질문 남겨주셔서 감사합니다.

막히면 언제든 무엇이든 자주 질문 던져주세요.

수학/과학이나 알고리즘과는 달리

업무자동화 코딩은 고민해서 풀리는 경우가 정말 드뭅니다.

다시 말씀드리지만, 질문을 자주자주 남겨주세요.

저도 최대한 빠르게 회신 드리겠습니다.

당부드릴 두 가지가 있습니다.

① 가급적 구체적으로 설명해주세요.
② 특정 챕터 관련 질문 남겨주실 때는,
어느 챕터인지 알려주세요ㅜ

====================================

 기본 파일이 하나 있습니다.

그리고, 예를 들면 앞부분이 동일한 파일을 여러개 같이 관리하고 있습니다.

 

이때 기본파일의 앞부분에 3조의 내용(법령 관련 지침이라 1,2,3,4,~조로 구성)이 변경되었을 때,
기본파일의 변경사항을 바꿀파일에 적용할 수 있을 지 문의 드립니다.

파일 첨부가 안되어서 이미지로 첨부해봅니다.

[기본파일 내용]

image.png

 

 [바꿀파일1]

image.png

[바꿀파일2]

image.png


답변 2

1

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

금열님 안녕하세요?ㅎ

기존에 파일을 작성하실 때 누름틀이나 필드 같은 장치를 사용하지 않으셨다면,

일일이 찾아가서 문구를 수정(또는 붙여넣기)하는 코드를 짜는 것이 최선의 방법 같습니다.

 

(더 좋은 방법이 있을 수도 있지만)

제가 보통 접근하는 방법은 아래와 같습니다.

 

1. 바뀔 영역의 패턴을 정의하기

저라면, "제3조(개인정보 보호 원칙)~" 으로 시작하면서

"제4조(정보주체의 권리)"를 포함하지 않는 범위까지 선택하겠습니다.

 

2. 기본 파일의 변경부분을 Ctrl-C

일회용 코드인데 굳이 GetPos 같은 메서드를 남발하지 않고,

기본파일의 3조 부분을 선택 후 Ctrl-C로 복사하겠습니다.

단, 주의할 점은 3조 끝부분까지만 선택하는지,

4조 시작부분까지 선택하는지가 중요합니다.

(저는 4조 첫글자 앞까지 선택하는 것으로 하겠습니다.)

 

3. for문으로 바꿀파일 모두 수정

os.listdir()로 바꿀 파일을 순차적으로 열면서

② "제3조" 시작부분을 찾고 나서,

③ 선택범위를 한줄씩 넓혀 가다가

④ "제4조(정보주체의 권리)" 문자열이 감지되면 해당 문단 윗문단까지만 선택하고

⑤ 붙여넣기 후 저장

 

위 과정을 코드로 작성해보면 아래와 같습니다.

아래 영상과 동일한 실습을 위한 첨부파일은 여기를 클릭하여 다운로드하실 수 있습니다.

(src 폴더의 문서들이 변경 전, dst 폴더의 문서들이 코드 적용 후 완성본입니다.)

녹화_2024_12_17_21_50_48_448.gif

 

실행결과 일부를 보여드리면,

467.png

 

실행한 코드는 아래와 같습니다.

from tkinter.filedialog import askopenfilenames
from pyhwpx import Hwp

hwp = Hwp()

hwp.open("./기본파일.hwpx")

# 3조 전체 직접 복사(Ctrl-C)
# 직접 복사한 후 아래 코드 이어서 실행

file_list = askopenfilenames()  # 바꿀파일 전부 선택

for f in file_list:
    hwp.open(f)  # 하나씩 열어서
    hwp.MoveDocBegin()  # 문서 시작으로 이동한 후
    hwp.find("제3조(개인정보 보호 원칙)")  # 3조를 찾고,

    while "제4조(정보주체의 권리)" not in hwp.get_selected_text():  # 4조가 선택될 때까지
        hwp.MoveSelNextParaBegin()  # 한문단씩 추가로 선택하다가
    hwp.MoveSelPrevParaBegin()  # (4조도 포함되었으면) 해당 문단은 선택해제하고
    hwp.Paste()  # 붙여넣기로 덮어씌우기
    hwp.save()  # 저장하기

코드가 짧기도 하고 크게 복잡하지는 않으므로

주석 정도만 읽어보셔도 프로세스는 이해하실 것으로 생각됩니다.

 

혹여, 대소문자가 뒤죽박죽인 것처럼 느껴지실 수 있습니다ㅜㅜ

파스칼케이스의 hwp.Pastehwp.MoveSel~ 같은 애들은

Run 액션 기반 메서드라서 기존 액션명을 유지하느라 대문자가 들어 있고,

hwp.open이나 hwp.save는, 일반 메서드이기 때문에 소문자로 명명했습니다.

hwp.find도 제가 임의로 추가한 메서드라서 소문자입니다..

처음엔 자주 헷갈릴 수 있으니 가급적 자동완성을 많이 쓰시는 걸 추천드립니다.

 

도움이 되었길 바랍니다.

행복한 하루 되세요!!

1

안녕하세요, 인프런 AI 인턴입니다. 류금열님.

주어진 상황을 보니, 여러 개의 문서에서 특정 부분을 자동화하고자 하신다는 내용입니다. 이는 Python을 사용해 문서의 특정 부분을 일괄적으로 수정하는 방식으로 접근할 수 있습니다. 이러한 자동화 작업을 어떻게 처리할 수 있는지 관련된 예제들과 질문을 추천해드리겠습니다.

  1. 기본파일의 변경사항을 다른 파일에 동일하게 반영하기

관련 질문과 답변:

한글 문서에서 특정 텍스트를 찾아 변경하는 방법

이 내용에서는 파이썬을 사용하여 한글 문서에서 특정 텍스트를 찾아 변경하는 방법을 다루고 있습니다. 여러 문서의 동일한 부분을 변화시킬 때, 이와 유사한 방법으로 접근할 수 있습니다. 기본적으로 pywin32 라이브러리를 사용하여 한글 프로그램과 상호작용하며 특정 문자열을 찾고 변경할 수 있습니다. 한글 문서의 규격화된 내용을 활용하여 특정 규칙이나 위치를 찾아내어 변경을 단순화할 수 있습니다.

  1. 여러 문서의 내용을 자동으로 변경하기

관련 질문과 답변:

누름틀 없는 한글문서 엑셀로 취합하기 응용 질문

이 게시물에서는 한글 파일의 여러 문서를 한 번에 다루는 법에 대해 다루고 있습니다. 이는 여러 문서에서 반복적 작업을 하기에 적합한 방법을 설명하고 있으니 자동화 시도를 하실 때 유용할 것입니다.

위와 같은 방식으로 기존의 예제 코드와 방법을 활용하면, 많은 문서에서 동일한 규칙에 따른 일괄적인 수정 작업이 가능할 것입니다. 다만, 첫 시작이시라면 환경 셋업과 기본적인 자동화 방법을 익히는 데 시간을 조금 투자하셔야 합니다.

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

류금열님의 프로필 이미지
류금열

작성한 질문수

질문하기