본문 바로가기

Python113

[세상 쉬운 파이썬중급] nonlocal? closure? yield? generator? 파이썬 입문 레벨을 즐겁게 공부하신 분들이 상당히 버거워하시는 몇 가지 키워드가 있더라고요. 대표적으로 yield, nonlocal, closure나, 코루틴, 제너레이터, 스레드 같은.. 중요하기도 하고, 이해하고 나면 의외로 간단한데 처음엔 겁이 덜컥 나는 키워드들 있잖아요ㅎㅎ 그래서, 최대한 간단한 예제를 가지고 생소한 키워드나 문법을 차근차근 뿌시는 영상 시리즈를 기획해보았습니다. 20분 내외 x 총 10회 정도로 구상중입니다. 문법을 정리하는 시간도 되고, 요새 심란한 마음이 다소나마 차분해지는 것 같아 개인적으로는 제작이 즐겁습니다. (업무자동화 콘텐츠 소재고갈 때문이기도 하고;;;) 하여튼 첫 영상은 클로저와 제너레이터에 대해 다뤄보았습니다. 파이썬 입문에서 실력이 멈췄다 싶은 분들께 추천드.. 2024. 3. 13.
[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.
opencv와 np.ascontiguousarray 난생 처음으로 파이썬에서 (단 한 번도 써 본 적도 없고, 있는 줄도 몰라서 궁금해 해본 적조차 없었던) np.ascontiguousarray 함수를 사용해서 오류를 해결하는 경험을 했다. 고백하건대 ChatGPT가 아니었으면 새벽까지 삽질하다 나자빠졌을 것ㅜ 해결돼서 기쁘지만 아직도 얼떨떨하다. opencv는 "연속된 메모리 배열"이란 걸 요구하는구나... C 근처에만 가면 나는 너무 작아졌다. 귀한 경험 한 셈 치고 넘어갈 게 아니고 이놈의 CS 공포증을 이제부터라도 극복해야겠다. 고마워, 챗지피티! ========= 부연하면, RGBA 이미지 배열을 RGB로 변환할 때 단순히 슬라이싱으로 img = img[:, :, :3] 으로 A값만 잘라내면 될 줄 알았는데, opencv로 이미지를 조작할 때 자.. 2024. 2. 1.
가볍게 배운 내용으로 강의할 때 빠지기 쉬운 함정이랄까? 최근 정말 감사하게도 귀인을 만나서 4시간 클래스를 두 번에 걸쳐 진행하게 되었습니다. 제법 큰 강의비도 선뜻 선불로 쏴주시고, 전적으로 저를 믿고 맡겨주셔서 저도 최선을 다해 준비하는 중에 문득 이런 생각이 들더군요. 최근 1인 지식창업가들 사이에서는 뭐든 빠르게 배우고 바로 입문강의로 아웃풋을 내라는 조언이 은근히 많이 보입니다. 그런데, 그런 강의들이 쉽게 빠질 수 있는 가장 큰 함정이자 단점을 꼽으라면 (강사도 입문자라면) 뭔가 기초를 꼼꼼히 알려줄 수 있지만 아무래도 "강의 이후의 방향"에 대해서는 적절하게 제시해주기 어렵다는 거겠지요. 제 이번 강의도 YOLOv8을 통한 이미지 인식과 분할 방법인데 실제 현업에서 어떻게 쓰이는지 최소한의 사례나, 방향이라도 알려주지 않으면 빈 깡통 같은 이론강.. 2024. 1. 28.
[pyhwpx] 한 줄의 코드로 자간자동조절 : auto_spacing 아래아한글 보고서 작성할 때, 자간 조절 작업만큼 사람 기빠지게 하는 작업이 또 있을까요ㅜ 맞아요. 힘들어서가 아니라, 자괴감이 들지요. HTML 삽입 미리보기할 수 없는 소스 격한 공감ㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ 윗분들은... 그냥 읽으시면 되는데, 외국인들은 자간조절 같은 거 안 하고 그냥 단어단어 끊어서 잘만 쓰던데.. "보기 좋다는" 보고서를 만들기 위해 자간조절 따위에 시간을 쓰고 있으면 정말 스트레스 받습니다. 팀장, 처장, 본부장, 사장이라는 사람들이 줄글에 단어 하나 끊어졌다고 문맥파악 못 하는 것도 아니고, 보고서 읽는 시간이 엄청 길어지는 것도 아닌데ㅜ 이상한 공무행정 관행이 우리나라에만 유난히 굳어져 있는 것 같아요. 그럼에도 하여튼, 이런 자간조절 작업 때문에 퇴근을 10분 더 늦.. 2024. 1. 26.
[pyhwpx] 폰트 설정을 위한 set_font 메서드 아래아한글의 글자모양은 제법 다양한 옵션들을 가지고 있습니다. 일반적인 보고서를 작성할 때 사용하는 글자크기(height), 위첨자와 아래첨자, 특별한 경우 글자색을 넣는 정도 외에도 다양한 글자모양 옵션을 아래와 같이 간단한 명령어를 조합하여 적용해볼 수 있습니다. hwp.set_font()의 파라미터 목록 Bold: 진하게 적용(True/False) DiacSymMark: 강조점(0~12) Emboss: 양각(True/False) Engrave: 음각(True/False) FaceName: 서체 이름 FontType: 1(TTF, 기본값) Height: 글자크기(pt, 0.1 ~ 4096) Italic: 이탤릭(True/False) Offset: 글자위치-상하오프셋(-100 ~ 100) OutLine.. 2024. 1. 26.
[pyhwpx] set_current_field_name 의 용도 : 셀에 필드 넣기 개인적인 생각이지만, 아래아한글 자동화의 90%는 필드 활용이 아닐까? 그 외의 반복업무 대부분은 정말 특수한 경우가 아닌 이상 손으로 하는 게, 코드 공부해서 적용하는 것보다 훨씬 빠를 것이다. 그냥 그런 생각이 들었다. 필드 만들고 채우고 꺼내고 하는 기능 외의 대부분의 기능은 부차적이라는 느낌. 급하지 않다면 그냥 틈틈이 연습하다가 때가 되면 써먹을 수 있지만, 대부분의 업무들은 급하니까. 오늘의 본론은 누름틀/필드를 생성할 때 사용할 수 있는 메서드는 두 가지가 있다. 누름틀 필드는 hwp.create_field(field, direction, memo) 셀필드는 hwp.set_current_field_name(field) 왜 이렇게 둘로 나눠야 했을까? 셀 안에도 누름틀을 넣을 수 있기 때문이다.. 2024. 1. 17.
[pyhwpx] gradation_on_cell 활용 일명, 이미지에 어울리는 배경 그라데이션 깔아주기! 이런 배경을 자동으로 생성할 수 있다? 증명사진이나, 투명영역이 있는 png 이미지 배경 그라데이션으로 적용해볼 수 있을 것. 다만, 어울리는 색이라기보다는 colorgram이라는 모듈을 이용해서 n개의 대표색상을 추출해서 한/글과 연동하여 그라데이션을 생성한다. 색상을 추출하는 코드는 아래와 같다. %pip install colorgram.py import colorgram # pip설치할 때 .py가 붙는 모듈은 정말 처음 봤다ㄷㄷㄷ colors = colorgram.extract('./sample.png', 7) # 대표색상 7개 추출 colors_list = [tuple(i.rgb) for i in colors] print(colors_list).. 2024. 1. 15.