본문 바로가기

분류 전체보기470

[pyhwpx] hwp.put_field_text에 입력 가능한 6가지 자료구조☆☆☆☆☆ 파이썬의 창시자 Guido Van Rossum 선생님은 말씀하셨지. Readability comes first, performance next. 가독성보다는 성능에 치중해서, 비교적 복잡한 메서드를 사용하는 프로그래머들에게 "경미한 성능향상보다는 가독성을 중시해서 코딩하라"는 맥락으로 연산자 오버로딩의 장점에 대해 다루면서 하신 말씀이긴 했지만, pyhwpx의 문법도 가급적 사용자 지향적으로, 성능보다는 가독성이나 편의 위주로 코드를 짜보고 있다. 약간 과하다 싶을만큼 추상화를 하기도 했고, "로우코드"스럽게 만들고 싶었다. (그렇다고 성능을 엄청 버린 건 아니고.. 내부적으로는 최대한 빠른 방법을 썼다.) 그 중 최고로 유용하게 쓰일 메서드를 고르라면 단연 put_field_text를 꼽고 싶은데(그 .. 2024. 2. 10.
[pyhwpx] 삽입할 필드가 너무 많을 때 : hwp.set_field_by_bracket() 아래아한글 문서를 자동화할 때 가장 많이 사용하는 기법은 역시 "필드삽입"이다. 누름틀이나 셀필드를 미리 삽입해 두고 엑셀문서나 데이터프레임에서 필드를 일괄삽입하는 방식으로 hwp 문서를 자동화할 수 있는데, 문제는 필드가 너무 많을 때에는 필드 삽입작업도 너무 귀찮다는 것. 예를 들어 아래의 문서를 자동화하려면 저 빈 칸에 전부 필드를 삽입해야 한다고 생각하면 자동화를 위한 준비작업조차 빡센 상황이 된다... 실제로는 이런 경우에는 필드삽입보다 한 행만 남겨놓고, 나머지 행을 삭제한 후 소스(엑셀파일)에 맞춰 동적으로 행을 추가해 가는 방식이 더 적절할 것 같기는 하다. 나중에 다뤄볼 것. 이런 경우에는 set_field_by_bracket을 사용해보자. 필드가 매겨질 곳에 대괄호 두겹으로 필드명을 써.. 2024. 2. 10.
[pyhwpx] 메모 또는 메모고침표 일괄삽입하는 예제 국립국어원에서는 일본어투 생활용어와 권장표현을 정리하여 두 차례 공개한 바 있다. (아이러니하게도 최근 공개한 자료의 용어 수가 50개로 예년의 자료에 비해 훨씬 적다.) 위 문서를 다운받은 후 아래 코드를 실행하면 교정표 데이터프레임이 만들어진다. import pandas as pd from pyhwpx import Hwp hwp = Hwp() hwp.open("이제부터는 분빠이하지 말고 각자내기합시다_보도자료.hwp") df = hwp.table_to_df(-1) # 1열 제거 df.drop("", axis=1, inplace=True) # 동일명의 칼럼끼리 병합하기 df.columns = [0, 1, 2, 3] df1 = df[[0, 1]] df2 = df[[2, 3]] df1.columns = [.. 2024. 2. 10.
[pyhwpx] 스크립트매크로를 파이썬 함수로 바꿔주는 hwp.clipboard_to_pyfunc hwp.clipboard_to_pyfunc 를 설명하기 전에 먼저, 기존에 정의된 스크립트매크로를 한/글에서 직접 실행하는 명령어도 있기는 하다. 바로 hwp.run_script_macro라는 메서드인데, 사용법은 간단하다. hwp.run_script_macro("OnScriptMacro_중국어1성()") 방식으로 사용하면 된다. 대신 유의할 점은, 스크립트매크로 목록의 이름인 "중국어1성"이 아니라 소스코드의 함수명인 "OnScriptMacro_중국어1성()"을 입력해야 한다는 것이다. (괄호 포함) 그런데, 매크로는 수시로 녹화하는 관계로, 지워지거나 변경되는 경우가 잦다. 그래서 특정 매크로를 파이썬 코드로 만들어 두고 싶을 때가 있는데, 이 과정이 어려운 것은 아니지만, 번거롭고 귀찮다. 그래서 .. 2024. 2. 10.
[pyhwpx] 페이지별로 분할 저장하기 100장의 문서가 있다고 할 때 페이지별로 1.hwp, 2.hwp, ..., 100.hwp로 저장하는 예제를 진행해보자. 위 문서를 다운받은 후 해당 폴더에서 쥬피터노트북을 실행한다. (본 포스팅에서는 '바탕화면'이라고 가정) 아래 명령어를 실행한다. import os from pyhwpx import Hwp # 바탕화면으로 이동 os.chdir( os.path.join( os.environ["USERPROFILE"], "desktop") ) # 분할파일 저장할 폴더 생성 os.mkdir("result") # 원본문서 열기 hwp = Hwp() hwp.open("표창장100ea.hwp") # 한페이지씩 잘라서 저장하기 hwp.add_doc() # 새 문서 열림 hwp.switch_to(0) # 원본 문서.. 2024. 2. 10.
[리눅스] if문 정리 셸스크립트를 처음 접하고 딱 하루 정도가 지날 즈음 든 생각은, 아니, 셸스크립트는 파이썬보다 막장이잖아? 막연하게나마 저런 생각이 들었다. 변수 타입도 없고, 따옴표도 어떤 땐 있으나마나 하고... sh의 "1 2 3 4 5"는 파이썬의 [1, 2, 3, 4, 5]와 같다는 것도 충격이었다. 우선 콤마란 게 필요없다. 어떤 때는 괄호도 필요없다. 또 어떤 경우에는 따옴표도 필요없다ㄷㄷㄷ 하여튼, 셸스크립트의 if문은 파이썬과 상당히 비슷한 면이 있다. 간단한 if문을 써보면 파이썬은 a = 10 if a == 10: print("equal") elif a < 10: print("less than 10") else: print("greater than 10") 이런 느낌이라면, 셸스크립트는 a=9 # 등.. 2024. 2. 10.
[리눅스] sh파일을 리포매팅해주는 shfmt shfmt shfmt는 인스톨해야 한다. `sudo apt install shfmt`를 실행했다. 파일명 참 맘에 든다. SHell ForMaT 잖아? 사용법을 간략히 알아봤는데 vim으로 이렇게 개떡같이 짜놓았어도 `shfmt ifex.sh`를 실행하면 아래처럼 출력해준다. 단, 파일이 바뀌어 있지는 않고, 그냥 결과물만 보여준다. 원본을 이대로 수정하려면 `shfmt -w ifex.sh`로 실행하면 된다. 아름답게 바뀌긴 했는데, then을 다음 줄로 내려준다든지, 들여쓰기를 네 칸으로 해준다든지 하는 작업은 하지 않았다. 들여쓰기 네 칸을 적용하려면 '-i 4' 옵션을 추가하면 된다. 이제 좀 예뻐졌는데? 다른 옵션은 없나? -s와 -mn을 각각 실행해보니, -s는 스페이스 네 칸을 탭 하나로 만들.. 2024. 2. 10.
[셸스크립트] for문의 스코프를 정하는 do와 done 먼저 파이썬에서는 for문을 통한 반복문의 범위는 들여쓰기로 결정한다.(는 점은 다들 알고 계실 것) #python3 for i in range(5): print(i) print("Keep going!") # 한 번만 출력됨 sh에서는 do와 done 사이에 반복 스코프를 넣으면 된다. #!/bin/bash for i in $* do # 들여쓰기 컨벤션이 궁금하다. echo $i done echo "Keep going!" 갑자기 궁금한 게 생겼다. 파이썬의 range 배열은 sh에서는 어떤 방식으로 만들 수 있을까? ChatGPT에게 물어보자. 이건 뭐, 다른 언어랑 비슷해 보이는 문법이라서 생소하지는 않은데, ...괄호가 두 겹이네. 신기한 건 , `for i in $*` 처럼 사용할 수도 있고, `f.. 2024. 2. 10.
[리눅스] 셸스크립트기초 - 지역변수와 전역변수 자바스크립트 같기도 하고, C 같기도 하면서, 파이썬 같기도 한... (사실 sh가 이들을 닮은 게 아니고, 얘들이 sh를 닮은 거겠지.) 셸 스크립트를 공부하는 중에, 전역변수와 로컬변수라는 개념이 내심 반가웠다. 파이썬에서는 함수 안에서 변수를 정의하면 그냥 자동으로 지역변수가 되는데, sh에서는 local 이라는 키워드를 넣어줘야 한다. #!/bin/bash language="Korean" function learn() { local learn_language="English" # 등호 좌우에 빈칸이 있으면 오류남ㅜ. 지역변수 정의 echo "I am learning $learn_language" # echo는 print와 같음. } function print_() { echo "I can spea.. 2024. 2. 10.