728x90
아래한글로 된 문서 세트에서 일괄 단어를 변경해야 하는 일이 생겼습니다.
하여, 파이썬으로 특정 폴더밑에 존재하는 아래한글 파일들 전체를 대상으로,
아래한글 문서내 단어들을 일괄변경하는 프로그램을 만들어 적용해 보았습니다.
문서가 몇 개 안 될 때에는 직접 하는 것이 더 빠르겠지만 문서 종류가 많고 이런 변경작업이 자주 발생 할 때에는 이 프로그램이 쓸모가 있을 것 같네요.
여기에서 아래한글을 조작하는 자세한 코딩법을 모르니 이건 아래한글 스크립트 매크로 기능을 이용하여 코딩에 활용하였습니다. 저같이 아래한글을 잘 모르는 경우는 참 다행인 것 같습니다.
아래한글 반복작업을 수행하는 스크립트 매크로 만들기
1. 스크립트 매크로 보안설정
도구 -> 스크립트매크로 -> 매크로 보안설정 선택 클릭
낮음으로 선택하고 설정 클릭
2. 스크립트 매크로 정의
도구 -> 스크립트매크로 -> 매크로 정의 선택
정의할 매크로 목록에서 아무거나 빈것을 선택-> 이름 정하고 -> 정의 버튼 클릭하고
이제부터 반복하고자 하는 작업을 아래한글에서 다 수행한 후
화면 아래 하단에서 기록중지버튼을 클릭하면 아래한글 내 매크로가 정의됨
3. 스크립트 매크로 실행
나중에 이 작업을 아래한글에서 수행하고자 한다면
도구-> 스크립트매크로 -> 매크로실행 -> 매크로 선택 -> 실행버튼 클릭
파이썬에서 아래한글 매크로 삽입
1. 스크립트 매크로 코드편집에서 코드 복사
2. 파이썬용 코드로 수정
파이썬에서 사용하기 위해서 복사한 스크립트를 파이썬용으로 수정
아래코딩에서 본분_찾아바꾸기가 아래한글에서 복사해 온 부분입니다.
( 예: function 대신 def로 변경,...)
3. 파이썬 코드
- 작업대상 폴더를 선택
- 하위 폴더를 계속 반복하며 아래한글 문서를 Open
- Open한 아래한글 문서에서프로그램에서 정의된 수정단어목록 대상들을 일괄변경 하는 프로그램 입니다.
# ####################################
## 아래한글파일 단어 일괄변경하기
#######################################
import os # 파일과 폴더이름을 다루기 편한 모듈
from tkinter import Tk #
from tkinter import filedialog ## 파일선택 GUI
import win32com.client as win32
import gc ### 메모리 정리
def get_directory(): # 디렉토리를 선택하는 탐색기 띄워 디렉토리 경로 가져오기
# 파일 선택 대화 상자를 엽니다.
root = Tk()
root.withdraw()
directory = filedialog.askdirectory()
root.destroy()
return directory
def 수정단어목록():
# 수정할 단어목록을 정의합니다
수정단어들 = {
'올드1 ': '신규1',
'올드2 ': '신규2',
.....
'올드n ': '신규n'
}
return 수정단어들.items()
def 한글_열기(한글파일, visible=True):
한글 = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
한글.XHwpWindows.Item(0).Visible = visible
한글.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule")
한글.Open(한글파일)
return 한글
def 본문_찾아바꾸기(Old_word, New_word):
한글.HAction.GetDefault("AllReplace", 한글.HParameterSet.HFindReplace.HSet)
한글.HParameterSet.HFindReplace.AutoSpell = 1
한글.HParameterSet.HFindReplace.Direction = 한글.FindDir("AllDoc")
한글.HParameterSet.HFindReplace.FindString = Old_word
한글.HParameterSet.HFindReplace.ReplaceString = New_word
한글.HParameterSet.HFindReplace.ReplaceMode = 1
한글.HParameterSet.HFindReplace.IgnoreMessage = 1
한글.HParameterSet.HFindReplace.FindType = 1
한글.HAction.Execute("AllReplace", 한글.HParameterSet.HFindReplace.HSet)
if __name__ == '__main__':
# root = Tk() # GUI 실행하고
dir_path = None
file_cnt = 0 ## 파일갯수 체크용
# 디렉토리를 선택합니다.
dir_path = get_directory()
수정단어들 = 수정단어목록()
for (root, directories, files) in os.walk(dir_path):
dirlength = len(root)
dirlastname = root[root.rfind('\\') + 1:dirlength] # 최종폴더명만 get해서 대상 폴더만 filtering
for file in files:
try:
# if file_cnt > 2: #### !!!!! 테스트를 위해 일부 결과보기위한 문장입니당~###########
# continue
file_path = os.path.join(root, file)
print(directories, file_path)
if file.find('.hwp') > 0: ### 원하는 파일타입 지정
pass
else:
continue
file_cnt = file_cnt + 1
한글 = 한글_열기( file_path)
for ii, jj in 수정단어들:
본문_찾아바꾸기(ii, jj)
한글.SaveAs(file_path)
# 한글 종료
한글.Quit()
except Exception as e:
print(f"Error processing file {file_path}: {str(e)}")
continue
gc.collect()
print("파일수 : ", file_cnt)
오늘도 수고 많으셨습니다. ^^
728x90
728x90
'IT잡학사전 > Python HTML etc' 카테고리의 다른 글
주피터노트북(Jupyter Notebook) 기본 폴더 변경 법 (0) | 2023.09.05 |
---|---|
파이썬을 클래스다이어그램으로 Reversing-Pynsource 무료SW (0) | 2023.07.24 |
HTML coding 코딩 실습 - 목록만들기 list, ul, ol, li .. (#3) (0) | 2023.01.07 |
HTML coding 코딩 실습 - form, input, select, textarea .. (0) | 2023.01.07 |
댓글