일코 강사님께서 일전에 "끼워넣기를 통해 아래아한글의 여러파일을 병합하는 코드"를 짜주셨는데요. 해당 코드가 작동은 하지만, 일부 기능은 원하는 대로 되지 않는 부분이 있어서 개선방법을 문의 드립니다. 현재의 파이썬 코드는 아래와 같습니다. from pyhwpx import Hwp # 임포트 hwp = Hwp() # 한/글 실행 import os # 작업할 디렉토리를 명시적으로 설정 (예: "C:/Users/Username/Documents") target_dir = "D:\magicfolder" # 작업 디렉토리로 변경 os.chdir(target_dir) # 끼워넣기 file_list = [i for i in os.listdir() if i.endswith(".hwp")] hwp.open(file_list[0]) # 첫 번째(0) 파일 열기 for i in file_list[1:]: # 첫 번째(0) 파일은 제외하고 두 번째(1)파일부터 아래 들여쓰기한 코드 반복 hwp.MoveDocEnd() # 한/글의 문서 끝으로 이동해서 hwp.BreakPage() # <----------------------- 페이지나누기(Ctrl-Enter) hwp.insert_file(i) # 문서끼워넣기(기본값은 섹션, 글자, 문단, 스타일 모두 유지??) hwp.save_as("취합본.hwp") # 반복이 끝났으면 "취합본.hwp"로 다른이름으로저장 hwp.Quit() # 한/글 프로그램 종료 "D:\magicfolder"에 n개의 파일을 넣어두고 위 코드를 실행하면, 첫 번째(0) 파일을 먼저 열고, 문서 끼워 넣기(ctrl+o)를 이용해 두 번째(1), 세 번째(2), ... n번째(n-1) 파일을 차례로 끼워넣기 합니다. 문서 끼워 넣기(ctrl+o) 팝업에서 아래아한글에서 체크할 수 있는 옵션은 아래의 4개 입니다. 제가 의도하는 것은 문서 끼워 넣기(ctrl+o) 시 매번 위 4개 항목(글자 모양 유지, 스타일 유지, 문단 모양 유지, 쪽 모양 유지)에 체크된 상태로 끼워넣는 것입니다. 여기서, 원하는 것은 끼워 넣는 다양한 파일들이 구역설정이나 스타일이 다를 때 각각의 원본을 그래로 유지한 채 병합하는 것입니다. 현재 코드에 일코님께서 메모해 주시기로는 hwp.insert_file(i) # 문서끼워넣기(기본값은 섹션, 글자, 문단, 스타일 모두 유지) 라고 하셨으나, 실제 코드를 실행한 결과는 첫 번째(0) 파일의 편집 용지(F7) 상 구역설정 1가지만 취합본에 적용된 것이 확인됩니다. 이게 불편한 이유는, 예를 들면 첫 번째(0) 파일, 두 번째(0) 파일, ..., n번째(n-1) 파일의 구역설정(상하좌우 용지여백 등)이 다를 때 첫 번째(0) 파일의 구역설정 1가지에 맞추어서 취합되면, 작성내용이 다 틀어지기 때문입니다. hwp.insert_file( ) 이라는 기능을 아래아한글 API문서에서 찾기 시도했으나 발견하지 못했습니다. hwp.insert_file( )이라는 기능은 일코님이 제작하신 pyhwpx 패키지에만 포함된 기능일까요? 코드를 실행해 문서 끼워 넣기(ctrl+o) 시, 글자 모양 유지, 스타일 유지, 문단 모양 유지, 쪽 모양 유지를 강제로 체크하도록 하는 방법이 있을까요? 도움 부탁드립니다. 감사합니다.
안녕하세요. 날짜 뒤에 요일 붙이기 코드가 작동이 되지 않아서 문의 드립니다. 제가 손코딩 한게 뭔가 오류가 있나 싶어서 강의에 있는 코드를 복붙해서 실행해봐도 아무런 변화가 없네요. 한글 파일은 자료다운에서 받은 실작업공정표를 사용했고 한글 2022, 한글 2024 두가지 버전 모두 아무런 변화가 없습니다ㅠㅠ import os import datetime as dt import win32com.client as win32 def init_hwp(): hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") hwp.XHwpWindows.Item(0).Visible = True hwp.RegisterModule("FilePathCheckDLL", "FileCheckerModule") return hwp hwp = init_hwp() hwp.Open(os.path.join(os.getcwd(),r"C:\Users\cctom\Desktop\python\hwp2python\실작업공정표.hwpx")) # date().weekday() : 월화수목금토일 # 0 1 2 3 4 5 6 def get_value(): hwp.InitScan(Range=0xff) # 추출범위를 "선택영역"으로 지정 text = hwp.GetText()[1] # 선택범위 문자열값 추출 hwp.ReleaseScan() # 검색종료 return text # 추출값 리턴 def get_weekday(text): week_list = ["월", "화", "수", "목", "금", "토", "일"] month, day = [int(i) for i in text.split(".")[:2]] week_num = dt.date(2022, month, day).weekday() week_day = week_list[week_num] return f"({week_day})" def insert_text(text): act = hwp.CreateAction("InsertText") pset = act.CreateSet() pset.SetItem("Text", text) act.Execute(pset) if __name__ == '__main__': hwp.FindCtrl() # 표 선택 hwp.Run("ShapeObjTableSelCell") # 첫 번째 셀로 진입(셀선택상태) while True: # 무한반복 text = get_value() # 셀의 텍스트 추출 if text.endswith("."): # 셀 안의 텍스트가 "."으로 끝나면(날짜셀을 구분하는 임의의 방법) weekday = get_weekday(text) # 요일 파악 hwp.Run("Cancel") # 셀선택 취소 hwp.Run("MoveLineEnd") # 문자열 끝으로 이동 insert_text(weekday) # 요일 삽입 hwp.Run("TableCellBlock") # 다시 셀선택 if not hwp.HAction.Run("TableRightCell"): # 우측으로 이동하다 break # 끝에 도달하면 while문 종료
안녕하세요 이번 9회차 실기 시험을 봤는데.. 합격을 하지 못했습니다ㅜㅜ 내년 상반기에 10회 실기 시험을 다시 응시하려고하는데.. 강의가 4월2일에 만료라서.. 혹시나 3개월정도 일시정지 가능할까요? 내년 시험기간쯔음에 다시 공부해서 꼭합격 하고 싶어요ㅜㅜㅜㅜ 다른 문의글 보니 메일주소를 남겨달라는 답변을 모아서 남깁니다 메일주소는 topk49@naver.com 입니다ㅜㅜ
안녕하세요 어제에 이어 강의 내용을 따라 가고 있는데요. 강의 내용대로 PostModelViewSet을 선언하고 (영상기준 8분30초까지 진행) pytest를 실행앴더니 test_unauthenticated_user_cannot_create_post 에서 assert 403 == 400 test_non_author_cannot_update_post 에서 assert 403 == 200 test_nonauthor_cannot_delete_post 에서 assert 403 == 204 오류가 각기 발생합니다. 강의를 따라가고 있는데 이런식으로만 오류가 발생하니 원인이 어디인지 찾기가 너무 힘든거 같습니다. 원인이 뭐고 이런 오류를 잡으려면 어떻게 해야할까요?
14:32 초 부근에 length 를 함수부분에서 널값이 있다 검색한다음에 호출하는것으로 이해했습니다. 궁금한점은.... Hello, world!에서 ","다음이 공란(널값)인데 수행이 멈추고 6이 출력되야 하지 않나 헷갈려서 문의드립니다. 정답은 13 공란이 포함되어 있던데 헷갈리네요^^;
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 1-11 2. 어려움을 겪는 부분 첫 시도에서 count_to_all_zero 와 count_to_all_one이 모두 1이 나오는 이유가 첫번째 문자에 대해서 비교를 안하고 있다고 나와있는데, 첫번째 문자가 아니라 맨 마지막 문자를 비교 안하고 있는 것이 아닌가 궁금합니다! 첫 시작에서는 0번째 인덱스와 1번째 인덱스를 비교하지만 마지막 len(string) - 1번째 인덱스와 len(string)를 비교할 때는 마지막 문자에 대한 카운팅이 이루어지지 않는게 아닌가 하는데.. 제가 잘못 이해하고 있는걸까요..? ㅠㅠ
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 1-10 2. 어려움을 겪는 부분 재취준을 준비하면서 여러 기업의 코딩테스트를 봤었는데요. 항상 시간 예외성 검사에 걸려서 코딩테스트를 탈락합니다. 그래서 이 문제를 보면서도 시간을 최대한 줄이고자 노력했습니다. 3. 시도해보신 내용 input = "abadabac" def find_not_repeating_first_character(string): while True: found_flag = False if len(string) > 1: target_char = string[0] for compare_char_index in range(1,len(string)): if target_char == string[compare_char_index]: found_flag = True break if found_flag: string = string.replace(target_char, "") else: return target_char else: return "_" result = find_not_repeating_first_character print("정답 = d 현재 풀이 값 =", result("abadabac")) print("정답 = c 현재 풀이 값 =", result("aabbcddd")) print("정답 =_ 현재 풀이 값 =", result("aaaaaaaa")) 제가 봐도 가독성이 안좋긴한데.. 저는 이 문제를 풀면서 가장 먼저 생각한 것이 '이미 한번 훑은 알파벳에 대해서는 순회를 제외한다' 였거든요. 그런데 글을 쓰면서 다시 확인해보니 string을 replace할 때 오히려 더 시간이 늘어날 것 같기도 하구요.. ㅠㅠ for문의 대상이 되는 객체를 for문 안에서 변경할 수 없기에 부득이하게 found_flag라는 변수를 선언해서 for문 밖에서 판단 후 replace 하는 식으로 코드를 작성했습니다. 궁금한 점이, 딩코딩코님은 이 접근법에 대해서 어떻게 생각하시나요? 저는 정말 간단할 수 있는 문제를 20분 정도의 시간을 고민하면서 풀었는데, 이런 부분 때문에 실제 코딩테스트를 응시할 때도 시간이 부족했습니다.. ㅠㅠ 코딩테스트를 보면 1 <= N <= 1,000,000,000 이런 식으로 제한을 두다 보니.. '길이 1억의 string이 주어졌을 때 전부 순회하면 시간이 너무 길어지지 않나..?' 하는 생각이 항상 발목을 잡는 것 같습니다.. 이런 문제를 접근할 때 어떤 식으로 접근해야 할지 조언 부탁드립니다.. 항상 좋은 강의 감사드립니다!! (_ _)
안녕하세요. airflow 파일의 폴더 구성에 대해 문의드립니다. airflow 를 사용하다보면 dag 외에 여러 파일이 필요한데 이때 해당 파일을 어떻게 정리하면 좋을지 궁금해서요. plugins 폴더에는 PythonOperator 에서 사용하는 함수 혹은 커스텀 오퍼레이터를 작성하는거 같습니다. 궁금한점은 오퍼레이터에 간접적으로 사용되는 함수도 plugins 폴더에 위치하는지 궁금합니다. 예를 들어 SQL 파일을 읽을때 SQL 파일을 읽어주는 함수를 작성한다고 해보면 해당 함수는 오퍼레이터에 간접적으로 사용됩니다. 그러면 해당 함수도 plugins 폴더에 위치하는게 권장되는걸까요 아니면 dags 폴더에 위치하는게 좋을까요? shell 파일은 plugins 폴더에 위치하는게 좋다고 하셨는데 그러면 sql 파일은 어떻게 위치하는게 좋은지 궁금합니다. 아래와 같은 방식이면 되는지 확인 부탁드립니다!. dags plugins ......ㄴ sql ............ㄴ read_table.sql ......ㄴ lib ............ㄴ common.py ......ㄴ shell ............ㄴ file_read.sh ......ㄴ custom_operator ............ㄴ file_parse.py dags 폴더에는 정말 dag 파일만 위치하는게 좋은지도 궁금합니다.
질문 남겨주셔서 감사합니다. 막히면 언제든 무엇이든 자주 질문 던져주세요. 수학/과학이나 알고리즘과는 달리 업무자동화 코딩은 고민해서 풀리는 경우가 정말 드뭅니다. 다시 말씀드리지만, 질문을 자주자주 남겨주세요. 저도 최대한 빠르게 회신 드리겠습니다. 당부드릴 두 가지가 있습니다. ① 가급적 구체적으로 설명해주세요. ② 특정 챕터 관련 질문 남겨주실 때는, 어느 챕터인지 알려주세요ㅜ ==================================== hwp.set_table_width() 이 함수가 특정 파일에선 안먹힙니다..ㅠㅠ 해당 한글 파일의 설정을 변경하거나 조정해야 할 부분이 있을까요? 일반적인 파일은 다 잘됩니다!
기존 강의에서 elem = browser.find_element_by_id("query") 였는데 이제는 elem = browser.find_element("id","query") 이렇게 작성해야함 ㅜㅜ 계속 AttributeError 떠서 미치는줄 알았는데 구글링해서 찾다보니 나와서 써보니 문법이 바뀐거였음
파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI, async, await)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. from app.config import NAVER_API_ID, NAVER_API_SECRET 가 아닌 from app.config import get_secret 로 import 한 이유가 궁금합니다. 클래스 내에 NAVER_API_ID = get_secret("NAVER_API_ID") NAVER_API_SECRET = get_secret("NAVER_API_SECRET") 로 변수 선언한 이유가 있을까요? get_secret은 config 파일에서 이미 수행해 NAVER_API_ID와 NAVER_API_SECRET을 변수로 가지고 있으니, 위처럼 클래스 내에 변수롤 또 선언하면 config 파일에서 get_secret 함수를 이용해 변수를 만든 이유가 없다고 생각이 들었습니다. from app.config import NAVER_API_ID, NAVER_API_SECRET config 파일에서 NAVER_API_ID와 NAVER_API_SECRET을 import해서 바로 사용하면 어떤 차이가 있나요?
한글2024 버전에선 이 코드로 한글 문서가 안열리는데 다른 방법을 써야 하나요? import win32com.client as win32 hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject") hwp.XHwpWindows.Item(0).Visible = True
질문은 동영상 강의에 들어가서 오른쪽에 커뮤니티 버튼을 통해 해주세요. 그래야 어떤 강좌에서 질문하셨는지 알 수 있습니다. 영상에서 몇 분 몇 초 대를 알려주셔야 제가 한 번에 질문 내용 확인이 가능합니다. 이미 다른 누군가가 질문을 한 이력 이 있을 수 있습니다. 질문 게시판을 한 번 확인 부탁드립니다. 학교의 과제나 타 강사의 코드 등 외부 수업 자료에 대해서는 답변하지 않습니다. 제가 다루는 커리큘럼 외의 이론이나, 너무 디테일한 컴퓨터 이론에 대해서는 답변 드리지 않습니다. 시험에 안 나오는 경우가 많고, 나와 봤자 1문제 나오는데 외워야 할 부분이 많은 것 등 (예시: 서브넷 마스크 계산) 질문을 올릴 때 이 글은 모두 지우고 내용을 입력해주세요. 유튜브로 3회차 합격률 영상보다가 20프로 할인한다는 거 보고 구매했습니다. 2025년도 되면 강의라든가 24년도 3회차 기출문제 풀이 이런것도 최신화가 되나요??