자청은 성공한 사업가답게 AI가 나오자마자 빠르게 활용법을 파해쳤다.
자청이 스스로 본인이 수많은 프롬프트를 만들었고 그 중 하나를 아깝지만 공개하였다고 했다.
Chatgpt , Gemini 등에서 사용하는 사용법인데 고정댓글로 공개한 프롬프트로 고민하고 있던 부분을 질문했고 답변을 보자마자 그냥 질문했을때와 하늘과 땅차이 수준의 퀄리티있는 답변을 보고 놀랐다.
"앞서가는 사람들은 이미 엄청난 수준으로 gen AI 를 활용하고 있구나..."
프롬프트 내용을 읽어봐도 무슨말인지 이해를 못할 정도이지만 프롬프트를 활용했을 경우 질문의 수준차이는 단박에 알아볼 수 있었다. 두려울 정도였다.
자청의 공개 프롬프트 ( 프롬프트 입력 후 질문을 추가하여 한번에 질문 )
Gemini와의 대화
# 천재적 사고 공식화 프롬프트 (Genius Thinking Formula Prompt)
1. 당신은 사용자의 어떤 질문이나 아이디어, 정보를 받으면, 아래 사고법 중에 가장 적합한 방식을 두개를 선택하여 혼합하여 분석하세요(1500자 이상)
2. 분석을 토대로 천재적 아이디어를 10개 이상 3000자 이상 출력합니다
아래 공식들은 참고하세요.
---
## 1. 천재적 통찰 도출 공식 (Genius Insight Formula)*GI = (O × C × P × S) / (A + B)*
- *GI(Genius Insight)* = 천재적 통찰
- *O(Observation)* = 관찰의 깊이 (1-10점)
- *C(Connection)* = 연결의 독창성 (1-10점)
- *P(Pattern)* = 패턴 인식 능력 (1-10점)
- *S(Synthesis)* = 종합적 사고 (1-10점)
- *A(Assumption)* = 고정관념 수준 (1-10점)
- *B(Bias)* = 편향 정도 (1-10점)
**적용법**: 주제에 대해 각 요소의 점수를 매기고, 고정관념과 편향을 최소화하면서 관찰-연결-패턴-종합의 순서로 사고를 전개하세요.
---
## 2. 다차원적 분석 프레임워크*MDA = Σ[Di × Wi × Ii] (i=1 to n)*
- *MDA(Multi-Dimensional Analysis)* = 다차원 분석 결과
- *Di(Dimension i)* = i번째 차원에서의 통찰
- *Wi(Weight i)* = i번째 차원의 가중치
- *Ii(Impact i)* = i번째 차원의 영향력
**분석 차원 설정**:
- D1 = 시간적 차원 (과거-현재-미래)
- D2 = 공간적 차원 (로컬-글로벌-우주적)
- D3 = 추상적 차원 (구체-중간-추상)
- D4 = 인과적 차원 (원인-과정-결과)
- D5 = 계층적 차원 (미시-중간-거시)
---
## 3. 창의적 연결 매트릭스*CC = |A ∩ B| + |A ⊕ B| + f(A→B)*
- *CC(Creative Connection)* = 창의적 연결 지수
- *A ∩ B* = 두 개념의 공통 요소
- *A ⊕ B* = 배타적 차이 요소
- *f(A→B)* = A에서 B로의 전이 함수
**연결 탐색 프로세스**:
1. 직접적 연결 찾기
2. 간접적 연결 탐색
3. 역설적 연결 발견
4. 메타포적 연결 구성
5. 시스템적 연결 분석
---
## 4. 문제 재정의 알고리즘*PR = P₀ × T(θ) × S(φ) × M(ψ)*
- *PR(Problem Redefinition)* = 재정의된 문제
- *P₀* = 원래 문제
- *T(θ)* = θ각도만큼 관점 회전
- *S(φ)* = φ비율로 범위 조정
- *M(ψ)* = ψ차원으로 메타 레벨 이동
**재정의 기법**:
- 반대 관점에서 보기 (θ = 180°)
- 확대/축소하여 보기 (φ = 0.1x ~ 10x)
- 상위/하위 개념으로 이동 (ψ = ±1,±2,±3)
- 다른 도메인으로 전환
- 시간 축 변경
---
## 5. 혁신적 솔루션 생성 공식*IS = Σ[Ci × Ni × Fi × Vi] / Ri*
- *IS(Innovative Solution)* = 혁신적 솔루션
- *Ci(Combination i)* = i번째 조합 방식
- *Ni(Novelty i)* = 참신성 지수
- *Fi(Feasibility i)* = 실현 가능성
- *Vi(Value i)* = 가치 창출 정도
- *Ri(Risk i)* = 위험 요소
**솔루션 생성 방법**:
- 기존 요소들의 새로운 조합
- 전혀 다른 분야의 솔루션 차용
- 제약 조건을 오히려 활용
- 역방향 사고로 접근
- 시스템 전체 재설계
---
## 6. 인사이트 증폭 공식*IA = I₀ × (1 + r)ⁿ × C × Q*
- *IA(Insight Amplification)* = 증폭된 인사이트
- *I₀* = 초기 인사이트
- *r* = 반복 개선율
- *n* = 반복 횟수
- *C* = 협력 효과 (1-3배수)
- *Q* = 질문의 질 (1-5배수)
**증폭 전략**:
- 'Why'를 5번 이상 반복
- 'What if' 시나리오 구성
- 'How might we' 질문 생성
- 다양한 관점자와 토론
- 아날로그 사례 탐구
---
## 7. 사고의 진화 방정식*TE = T₀ + ∫[L(t) + E(t) + R(t)]dt*
- *TE(Thinking Evolution)* = 진화된 사고
- *T₀* = 초기 사고 상태
- *L(t)* = 시간 t에서의 학습 함수
- *E(t)* = 경험 축적 함수
- *R(t)* = 반성적 사고 함수
**진화 촉진 요인**:
- 지속적 학습과 정보 습득
- 다양한 경험과 실험
- 깊은 반성과 메타인지
- 타인과의 지적 교류
- 실패로부터의 학습
---
## 8. 복잡성 해결 매트릭스*CS = det|M| × Σ[Si/Ci] × ∏[Ii]*
- *CS(Complexity Solution)* = 복잡성 해결책
- *det|M|* = 시스템 매트릭스의 행렬식
- *Si* = i번째 하위 시스템 해결책
- *Ci* = i번째 하위 시스템 복잡도
- *Ii* = 상호작용 계수
**복잡성 분해 전략**:
- 시스템을 하위 구성요소로 분해
- 각 구성요소 간 관계 매핑
- 핵심 레버리지 포인트 식별
- 순차적/병렬적 해결 순서 결정
- 전체 시스템 최적화
---
## 9. 직관적 도약 공식*IL = (S × E × T) / (L × R)*
- *IL(Intuitive Leap)* = 직관적 도약
- *S(Silence)* = 정적 사고 시간
- *E(Experience)* = 관련 경험 축적
- *T(Trust)* = 직관에 대한 신뢰
- *L(Logic)* = 논리적 제약
- *R(Rationalization)* = 과도한 합리화
**직관 활성화 방법**:
- 의식적 사고 중단
- 몸과 마음의 이완
- 무의식적 연결 허용
- 첫 번째 떠오르는 아이디어 포착
- 판단 없이 수용
---
## 10. 통합적 지혜 공식*IW = (K + U + W + C + A) × H × E*
- *IW(Integrated Wisdom)* = 통합적 지혜
- *K(Knowledge)* = 지식의 폭과 깊이
- *U(Understanding)* = 이해의 수준
- *W(Wisdom)* = 지혜의 깊이
- *C(Compassion)* = 공감과 연민
- *A(Action)* = 실행 능력
- *H(Humility)* = 겸손함
- *E(Ethics)* = 윤리적 기준
---
## 사용 가이드라인
1. **단계적 적용**: 각 공식을 순차적으로 적용하여 사고를 심화시키세요.
2. **반복적 개선**: 한 번의 적용으로 끝내지 말고 여러 번 반복하여 정교화하세요.
3. **다양한 관점**: 서로 다른 배경을 가진 사람들과 함께 공식을 적용해보세요.
4. **실험적 태도**: 공식을 기계적으로 따르기보다는 창의적으로 변형하여 사용하세요.
5. **균형적 접근**: 분석적 사고와 직관적 사고를 균형 있게 활용하세요.
이 공식들을 활용하여 어떤 주제든 천재적 수준의 통찰과 혁신적 솔루션을 도출해보세요. 공식은 사고의 프레임워크일 뿐, 진정한 천재성은 이를 창의적으로 활용하는 당신의 마음에서 나옵니다.
"MS word 양식파일과 컨텐츠텍스트 파일을 읽어서 MS word 양식파일에 맞게 컨텐츠를 작성해주는 파이선 프로그램을 개발하는 방법을 알려줘"
위 프롬프트에 대한 gemini 답변
사용자의 요청, "MS Word 양식 파일과 콘텐츠 텍스트 파일을 읽어 양식에 맞게 콘텐츠를 작성해주는 파이썬 프로그램 개발 방법"에 대해, **문제 재정의 알고리즘(PR)**과 **다차원적 분석 프레임워크(MDA)**를 혼합하여 분석하고, 이를 통해 도출된 천재적 아이디어들을 제시하겠습니다.
🧐 천재적 사고 공식을 활용한 문제 분석
1. 문제 재정의 알고리즘 (Problem Redefinition, PR) 적용
먼저 주어진 문제를 단순히 '텍스트를 워드 파일에 넣는 프로그램'으로 보지 않고, 그 본질과 잠재력을 파악하기 위해 문제 재정의 알고리즘을 적용합니다.
- P₀ (원래 문제): MS Word 양식 파일(.docx)과 콘텐츠 텍스트 파일(.txt)을 입력받아, 양식에 맞게 콘텐츠를 채워 넣는 파이썬 프로그램을 개발하는 것.
- T(θ): 관점 회전 (θ = 180°)
- 개발자 관점: python-docx 라이브러리를 사용해 특정 문자열(Placeholder)을 찾아 바꾸는 스크립트를 어떻게 구현할까?
- 사용자 관점: 반복적인 보고서, 계약서, 안내문 작성 업무를 어떻게 하면 클릭 한 번으로 끝낼 수 있을까? 텍스트뿐만 아니라 엑셀 데이터, 이미지도 자동으로 넣고 싶다.
- 관리자 관점: 팀원들이 모두 통일된 양식과 형식으로 문서를 작성하게 하여 브랜드 일관성을 유지하고, 수작업으로 인한 오류를 어떻게 원천 차단할까?
- S(φ): 범위 조정 (φ = 0.1x ~ 10x)
- 축소 (Zoom-in, φ = 0.1x): 워드 문서의 가장 작은 단위는 무엇인가? 단락(Paragraph), 글자(Run), 스타일(Style), 표(Table), 셀(Cell), 이미지(Image)다. 단순 텍스트 교체를 넘어, 특정 글자의 폰트, 색상, 표의 특정 셀 값, 이미지까지 제어해야 진짜 '자동화'다. '콘텐츠 텍스트 파일'은 정말 단순 텍스트일까? 아니면 JSON, CSV, YAML처럼 구조화된 데이터일 가능성이 높다.
- 확대 (Zoom-out, φ = 10x): 이 프로그램이 단일 문서 생성을 넘어 수백, 수천 개의 문서를 대량으로 생성하는 시스템이라면? 예를 들어, 데이터베이스의 고객 명단을 읽어 수천 개의 개인화된 환영 편지를 만들거나, 매일 아침 서버 로그 데이터를 분석해 자동으로 일일 리포트를 생성하는 시스템으로 확장될 수 있다. 이는 단순한 '스크립트'가 아닌 '문서 자동화 파이프라인'의 개념이 된다.
- M(ψ): 메타 레벨 이동 (ψ = +1)
- 이 문제의 상위 개념은 '데이터 시각화' 또는 '정보의 구조적 표현'이다. 즉, 비정형 데이터(콘텐츠)를 정형화된 틀(템플릿)에 담아 가치 있는 정보로 변환하는 과정이다. 따라서 이 프로그램의 본질은 **'데이터-문서 변환 엔진(Data-to-Document Transformation Engine)'**을 만드는 것이다.
- PR (재정의된 문제)
- 단순 텍스트 대체를 넘어, 다양한 형태의 구조화된 데이터 소스(JSON, DB, Excel 등)를 입력받아, 텍스트뿐만 아니라 표, 이미지, 차트까지 포함된 복합적인 MS Word 템플릿의 동적 요소를 정밀하게 제어하고, 특정 비즈니스 로직에 따라 개인화된 문서를 대량으로 자동 생성하는 확장 가능한 '지능형 문서 자동화 시스템'을 어떻게 개발할 것인가?
2. 다차원적 분석 프레임워크 (Multi-Dimensional Analysis, MDA) 적용
이렇게 재정의된 문제를 다차원적으로 분석하여 구체적인 실행 방향을 탐색합니다.
- D1: 시간적 차원 (과거-현재-미래)
- 과거: 워드의 '메일 머지(Mail Merge)' 기능. 사용이 제한적이고, 프로그래밍 방식의 자동화가 어려웠다.
- 현재: python-docx 같은 라이브러리를 활용한 스크립트 기반 자동화. 개발자 중심의 해결책이다.
- 미래: AI가 콘텐츠의 맥락을 이해하고, 가장 적합한 템플릿을 추천하거나 심지어 템플릿의 일부 레이아웃을 동적으로 수정한다. 클라우드 기반 서비스(SaaS) 형태로 발전하여, API를 통해 다른 서비스(예: Salesforce, Google Sheets)와 연동되어 워크플로우 전체를 자동화한다.
- D2: 공간적 차원 (로컬-글로벌)
- 로컬: 내 컴퓨터에서 실행되는 단일 파이썬 스크립트.
- 글로벌: 웹 서버에서 구동되는 서비스. 사용자는 웹 브라우저를 통해 템플릿과 데이터를 업로드하고, 생성된 문서를 다운로드하거나 이메일로 즉시 발송한다. 전 세계 어디서든 협업하며 문서 생성이 가능하다.
- D3: 추상적 차원 (구체-추상)
- 구체: doc.add_paragraph('Hello, world!') 같은 코드 한 줄.
- 중간: 데이터 필드와 템플릿 플레이스홀더를 매핑하는 설정 파일(예: mapping.json). 코드를 수정하지 않고도 다른 종류의 문서를 생성할 수 있게 된다.
- 추상: 비개발자도 문서 생성 규칙을 정의할 수 있는 그래픽 사용자 인터페이스(GUI) 또는 도메인 특화 언어(DSL). "고객 등급이 'VIP'이면, 계약서의 '특별 조항' 섹션을 포함하라"와 같은 비즈니스 로직을 코딩 없이 구현한다.
- D5: 계층적 차원 (미시-거시)
- 미시: 단어 하나의 스타일(볼드, 이탤릭)을 바꾸는 기능.
- 중간: 데이터 목록을 받아 워드 문서에 동적으로 표를 생성하는 모듈.
- 거시: 데이터 소스 연결, 템플릿 관리, 문서 생성, 후처리(PDF 변환, 이메일 전송), 로깅, 사용자 관리까지 포함하는 전체 애플리케이션 아키텍처.
이러한 입체적 분석을 통해, 우리는 단순한 스크립트 개발을 넘어 하나의 완성된 제품 또는 서비스로 가는 로드맵을 그릴 수 있게 되었습니다.
✨ 천재적 아이디어 10가지
위 분석을 토대로, 단순한 프로그램을 넘어 혁신적인 솔루션으로 발전시킬 수 있는 10가지 아이디어를 제시합니다.
1. 코어 엔진: 마크다운/HTML to Word 변환기
단순히 {{placeholder}}를 텍스트로 바꾸는 것을 넘어, 입력 콘텐츠 자체에 서식을 부여하는 아이디어입니다. 사용자는 마크다운(**볼드**, *이탤릭*)이나 간단한 HTML 태그를 포함한 텍스트 파일을 콘텐츠로 제공합니다. 프로그램은 이 마크다운/HTML을 파싱하여 워드 문서에 스타일(볼드, 글머리 기호, 헤더 등)이 적용된 상태로 콘텐츠를 삽입합니다. 이를 통해 개발 지식이 없는 사용자도 쉽게 서식이 풍부한 문서를 생성할 수 있습니다.
- 구현: markdown 라이브러리로 마크다운을 HTML로 변환하고, BeautifulSoup으로 HTML을 파싱하면서 각 태그에 해당하는 스타일을 python-docx를 이용해 적용합니다.
2. 설정 기반 매핑 엔진 (Declarative Mapping Engine)
하드코딩을 최소화하고 유연성을 극대화하는 아이디어입니다. 별도의 YAML이나 JSON 설정 파일을 통해 '어떤 데이터 소스의 어떤 필드'를 '워드 템플릿의 어떤 플레이스홀더'에 매핑할지 선언적으로 정의합니다.
- 예시 (YAML 설정 파일):이 방식을 사용하면, 코드를 전혀 건드리지 않고 설정 파일만 수정하여 완전히 다른 종류의 문서 자동화 작업을 수행할 수 있습니다.
-
YAML
source: "customers.xlsx" template: "contract_template.docx" output_path: "generated_contracts/" filename_pattern: "Contract_{{회사명}}.docx" mappings: "{{customer_name}}": "고객이름" "{{contract_date}}": "계약일" "{{product_list}}": type: table source_field: "구매목록"
3. 폴리글롯 데이터 커넥터 (Polyglot Data Connector)
.txt 파일에 국한되지 않고 다양한 데이터 소스를 지원하는 모듈식 구조를 만듭니다. 사용자는 데이터 소스 유형(Excel, CSV, JSON, SQLite, MySQL, REST API 등)만 지정하면, 프로그램이 알아서 해당 데이터를 읽고 파싱하여 처리합니다.
- 구현: pandas를 핵심 데이터 처리 엔진으로 사용하여 대부분의 정형 데이터를 DataFrame으로 변환하고, 각 데이터 소스에 맞는 커넥터(어댑터 패턴)를 구현합니다.
4. 진자2(Jinja2) 스타일의 고급 템플릿 엔진
단순 변수 치환을 넘어, 프로그래밍적인 로직을 템플릿 안에 직접 구현합니다. 웹 개발에서 널리 쓰이는 Jinja2 템플릿 엔진의 문법을 워드 문서에 적용하는 것입니다.
- 예시 템플릿 내용:
- 조건문: {% if user.grade == 'premium' %} 프리미엄 고객님을 위한 특별 혜택... {% endif %}
- 반복문: {% for item in product_list %} - {{ item.name }}: {{ item.price }}원 {% endfor %}
- 구현: docx-mailmerge 라이브러리가 유사한 기능을 제공하지만, 더 복잡한 로직을 위해 XML(docx 파일의 실체) 레벨에서 직접 파싱하고 Jinja2 라이브러리와 결합하여 커스텀 렌더링 엔진을 구축할 수 있습니다.
5. 동적 이미지 & 차트 인젝터 (Dynamic Visuals Injector)
텍스트를 넘어 시각 자료까지 자동화합니다. 데이터에 따라 다른 이미지를 삽입하거나, Excel 데이터를 기반으로 워드 문서 안의 차트(그래프)를 동적으로 업데이트합니다.
- 구현: python-docx는 이미지 삽입 기능을 제공합니다. 차트의 경우, 워드에 삽입된 차트가 참조하는 embedded_excel.xlsx 파일을 openpyxl 라이브러리로 직접 열어 데이터를 수정한 뒤 저장하면, 워드 파일을 열었을 때 차트가 자동으로 업데이트됩니다.
6. GUI / 웹 인터페이스: '도큐멘토(Documento)'
모든 기능을 비개발자도 쉽게 사용할 수 있도록 GUI를 제공합니다. 웹 기반(Flask/Django) 또는 데스크톱(PyQt/Tkinter) 애플리케이션을 만들어, 사용자가 템플릿 파일, 데이터 파일, 설정 파일을 업로드하고 '생성' 버튼만 누르면 결과물을 받을 수 있게 합니다.
7. 워크플로우 자동화 & 파이프라인 빌더
문서 생성을 전체 업무 프로세스의 한 단계로 통합합니다. 예를 들어, '1. Google Sheets에서 신규 고객 데이터 감지 → 2. 해당 데이터로 계약서 자동 생성 → 3. PDF로 변환 → 4. DocuSign API로 전자 서명 요청 → 5. 완료된 계약서를 Google Drive 폴더에 저장'과 같은 워크플로우를 구성할 수 있게 합니다.
- 구현: Celery와 같은 작업 큐(Task Queue)와 각 서비스의 API를 연동하여 파이프라인을 구축합니다.
8. AI 기반 콘텐츠 증강 (AI Content Augmentation)
단순히 데이터를 '채워넣는' 것을 넘어 AI가 콘텐츠를 '생성'하고 '개선'하는 단계입니다.
- AI 요약: 긴 보고서 데이터를 입력하면, AI가 핵심 내용을 요약하여 템플릿의 '개요' 섹션에 자동으로 채워 넣습니다.
- AI 초안 작성: 핵심 키워드 몇 개만 입력하면, AI가 해당 주제에 대한 소개 문단, 이메일 본문 등을 초안으로 작성해줍니다.
- AI 톤앤매너 조절: 생성된 문서의 어조를 '전문적으로', '친근하게', '캐주얼하게' 등 원하는 스타일에 맞게 AI가 자동으로 수정해줍니다.
- 구현: OpenAI의 GPT나 Google의 Gemini API를 프로그램에 연동하여 구현합니다.
9. 버전 관리 및 템플릿 관리 시스템
기업 환경에서는 템플릿의 버전 관리가 매우 중요합니다. Git과 유사한 개념을 도입하여, 누가 언제 템플릿을 수정했는지 이력을 추적하고, 변경 사항을 승인하는 워크플로우를 갖춘 중앙 관리 시스템을 구축합니다. 이를 통해 항상 올바른 최신 버전의 양식을 사용하도록 보장합니다.
10. 대화형 문서 생성 AI 챗봇
사용자가 챗봇과의 대화를 통해 문서를 생성하는 혁신적인 인터페이스입니다.
- 챗봇: "어떤 종류의 문서를 만들고 싶으세요?"
- 사용자: "거래명세서"
- 챗봇: "거래처 이름과 공급받는 자 정보를 알려주세요."
- ... 이런 식으로 대화를 통해 필요한 정보를 모두 수집한 뒤, 챗봇이 최종적으로 완성된 워드 문서를 사용자에게 전달합니다. 이는 문서 생성 경험을 완전히 새로운 차원으로 끌어올릴 것입니다.
이 아이디어들은 사용자의 초기 질문에서 출발하여, 문제의 본질을 꿰뚫고 다양한 차원에서 확장하여 탄생한 결과물입니다. 단순한 파이썬 스크립트 개발을 넘어, 강력하고 확장성 있는 '문서 자동화 플랫폼'을 구축하는 청사진이 될 수 있을 것입니다.
--------------------------------------------------------------------------------------------------------------------------------------------------------------
프롬프트 사용하지 않고 그냥 질문했을 때 답변
MS Word 양식 파일과 콘텐츠 텍스트 파일을 읽어 자동으로 MS Word 문서를 생성하는 파이썬 프로그램을 개발하는 방법을 알려드리겠습니다. 이 방법은 python-docx 라이브러리를 사용하여 양식 파일의 스타일과 구조를 유지하면서 내용을 채워 넣는 방식에 중점을 둡니다.
파이썬으로 MS Word 자동화 프로그램 개발하기 📝
MS Word 양식 파일(.docx)과 별도의 콘텐츠 텍스트 파일을 파이썬으로 처리하여, 양식 파일에 콘텐츠를 자동으로 채워 넣고 새로운 Word 문서를 생성하는 과정은 다음과 같습니다. 이 방법을 사용하면 반복적인 문서 작업을 효율적으로 자동화할 수 있습니다.
1. 핵심 라이브러리: python-docx
이 프로그램의 핵심은 python-docx 라이브러리입니다. 이 라이브러리를 사용하면 파이썬 코드로 Word 문서를 읽고, 수정하고, 생성할 수 있습니다. 먼저, 이 라이브러리를 설치해야 합니다.
pip install python-docx
2. 개발 단계별 안내
1단계: MS Word 양식 파일 준비
먼저, 내용이 채워질 부분을 **특정한 양식(Placeholder)**으로 표시한 Word 양식 파일(.docx)을 만듭니다. 예를 들어, 아래와 같이 중괄호 {{ }}를 사용하여 각 항목을 구분하는 것이 일반적입니다.
- 양식 파일 예시 (양식.docx)
- 제목: {{제목}}
- 작성자: {{작성자}}
- 내용: {{내용}}
2단계: 콘텐츠 텍스트 파일 준비
양식에 채워 넣을 내용을 담은 텍스트 파일을 준비합니다. 데이터 관리가 용이하도록 JSON 형식을 사용하는 것을 추천합니다. JSON은 키(key)와 값(value)으로 이루어져 있어 양식의 placeholder와 매칭하기 편리합니다.
- 콘텐츠 파일 예시 (콘텐츠.json)
-
JSON
{ "제목": "파이썬을 활용한 Word 문서 자동화", "작성자": "홍길동", "내용": "이 문서는 python-docx 라이브러리를 사용하여 자동으로 생성되었습니다. 이 방법을 통해 반복적인 문서 작업을 효율적으로 처리할 수 있습니다." }
3단계: 파이썬 코드 작성
이제 본격적으로 파이썬 코드를 작성하여 두 파일을 읽고, 내용을 채워 새로운 Word 문서를 생성합니다.
- 필요한 모듈 가져오기
-
Python
import json from docx import Document - 콘텐츠 파일 및 양식 파일 열기
- json.load() 함수로 JSON 파일의 데이터를 딕셔너리 형태로 불러옵니다.
- Document() 함수로 Word 양식 파일을 엽니다.
Python# 콘텐츠 데이터 불러오기 with open('콘텐츠.json', 'r', encoding='utf-8') as f: context = json.load(f) # Word 양식 파일 열기 doc = Document('양식.docx') - 내용 치환하기
- 문서의 모든 단락(paragraphs)과 표(tables)를 순회하면서, 양식 파일에 정의된 placeholder ({{키}})를 찾아 context 딕셔너리의 해당 값으로 바꿉니다.
- .replace() 메서드를 사용하지만, run 단위로 쪼개질 수 있으므로 함수로 만들어 처리하는 것이 안정적입니다.
*주의: python-docx에서 텍스트를 치환하는 것은 복잡할 수 있습니다. 단락의 텍스트(paragraph.text)는 읽기 전용 속성이며, 실제 내용은 run이라는 단위로 나뉘어 저장되기 때문입니다. 위의 코드는 기본적인 경우를 다루지만, 서식이 복잡하게 섞인 경우 run을 직접 조작하는 더 정교한 코드가 필요할 수 있습니다.Pythondef replace_text(document, old_text, new_text): """문서 내의 특정 텍스트를 다른 텍스트로 치환합니다.""" for paragraph in document.paragraphs: if old_text in paragraph.text: # 단락 내에서 텍스트가 여러 'run'으로 나뉘어 있을 수 있으므로, # run을 합치고 텍스트를 바꾼 후 다시 나누는 방식이 필요할 수 있습니다. # 간단한 경우 아래 코드로도 동작합니다. inline = paragraph.runs # 텍스트를 합쳤다가 다시 나누며 바꾸기 for i in range(len(inline)): if old_text in inline[i].text: text = inline[i].text.replace(old_text, new_text) inline[i].text = text for table in document.tables: for row in table.rows: for cell in row.cells: replace_text(cell, old_text, new_text) # 재귀적으로 셀 안의 텍스트도 변경 # context의 모든 키-값 쌍에 대해 치환 실행 for key, value in context.items(): placeholder = f'{{{{{key}}}}}' replace_text(doc, placeholder, str(value)) - 결과 파일 저장
- 내용이 모두 채워진 doc 객체를 새로운 파일 이름으로 저장합니다.
Python# 결과 파일 저장 doc.save('결과.docx') print("MS Word 파일 생성이 완료되었습니다: 결과.docx")
3. 전체 코드 예시
import json
from docx import Document
from docx.shared import Inches
def replace_text_in_paragraph(paragraph, key, value):
"""단락 내의 placeholder를 주어진 값으로 바꿉니다."""
# paragraph.text는 여러 run의 텍스트가 합쳐진 결과입니다.
# placeholder가 여러 run에 걸쳐 있을 경우를 대비한 로직이 필요하지만,
# 대부분의 경우 하나의 run 안에 있습니다.
if key in paragraph.text:
inline = paragraph.runs
# run을 순회하며 텍스트 치환
for i in range(len(inline)):
if key in inline[i].text:
text = inline[i].text.replace(key, value)
inline[i].text = text
# 필요하다면 여기서 글꼴 스타일 등을 유지하는 코드를 추가할 수 있습니다.
def fill_word_template(template_path, content_path, output_path):
"""
Word 템플릿과 콘텐츠 파일을 사용하여 새로운 Word 문서를 생성합니다.
:param template_path: MS Word 양식 파일 경로 (.docx)
:param content_path: 콘텐츠 파일 경로 (.json)
:param output_path: 저장할 결과 파일 경로 (.docx)
"""
# 1. 콘텐츠 파일 읽기
try:
with open(content_path, 'r', encoding='utf-8') as f:
context = json.load(f)
except FileNotFoundError:
print(f"오류: 콘텐츠 파일을 찾을 수 없습니다 - {content_path}")
return
except json.JSONDecodeError:
print(f"오류: JSON 파일 형식이 올바르지 않습니다 - {content_path}")
return
# 2. Word 양식 파일 열기
try:
doc = Document(template_path)
except Exception as e:
print(f"오류: Word 양식 파일을 여는 중 문제가 발생했습니다 - {e}")
return
# 3. 내용 치환 (단락 및 표)
for key, value in context.items():
placeholder = f'{{{{{key}}}}}'
# 단락 내 텍스트 치환
for paragraph in doc.paragraphs:
replace_text_in_paragraph(paragraph, placeholder, str(value))
# 표 안의 텍스트 치환
for table in doc.tables:
for row in table.rows:
for cell in row.cells:
for paragraph in cell.paragraphs:
replace_text_in_paragraph(paragraph, placeholder, str(value))
# 4. 결과 파일 저장
try:
doc.save(output_path)
print(f"성공: '{output_path}' 파일이 성공적으로 생성되었습니다.")
except Exception as e:
print(f"오류: 파일을 저장하는 중 문제가 발생했습니다 - {e}")
# --- 프로그램 실행 ---
if __name__ == "__main__":
양식_파일_경로 = "양식.docx"
콘텐츠_파일_경로 = "콘텐츠.json"
결과_파일_경로 = "결과_문서.docx"
fill_word_template(양식_파일_경로, 콘텐츠_파일_경로, 결과_파일_경로)
이 방법을 활용하면 보고서, 계약서, 안내문 등 정형화된 문서를 대량으로 생성해야 할 때 매우 유용합니다. 프로그램의 기능을 확장하여 데이터베이스나 엑셀 파일에서 콘텐츠를 읽어오도록 수정할 수도 있습니다.
'Life' 카테고리의 다른 글
| 뭘 해도 행복한 사람과 불만인 사람의 말버릇 | 박재연 리플러스 인간연구소 소장 #대화 #관계 #심리 (0) | 2025.05.06 |
|---|---|
| 세이노의 가르침 인터뷰 (1) | 2023.07.27 |
| 오은영박사의 부모 십계명 (0) | 2022.09.27 |
| 월급쟁이 투자 방법 (0) | 2022.02.22 |
| 간헐적 단식 유용한 경험담 (0) | 2022.01.10 |
