프로그래밍 언어/Python

정기예금 상품 목록 입력하기

· 코딩마이데이

비주얼 스튜디오 코드에서 새로운 파일을 만들고, 파일명을 'step_3_4.py'로 지정합니다. 다음 코드를 입력한 후, 대화형 창에서 실행합니다. 정기예금 상품 데이터가 입력된 워드 파일이 생성됩니다.

 

ch_10/step_3_4.py

from pathlib import Path
import pandas as pd
from docx import Document
from docx.enum.table import WD_ALIGN_VERTICAL, WD_TABLE_ALIGNMENT
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.shared import Mm
from step_1_1 import OUT_DIR
from step_1_2 import OUT_1_2
from step_3_1 import apply_font
from step_3_2 import add_blank_paragraph
from step_3_3 import OUT_3_3

OUT_3_4 = OUT_DIR / f"{Path(__file__).stem}.docx"

def insert_deposit_info(n_rows: int = 10): # 15
    doc = Document(OUT_3_3)
    r_head = doc.add_paragraph().add_run("2. 주요 정기예금 상품 및 금리")
    apply_font(r_head, size_pt=14, is_bold=True) # 폰트
    add_blank_paragraph(doc, size_pt=2) # 빈 단락

    table = doc.add_table(rows=1, cols=2,
                          style="Light Shading Accent 4") # 표
    table.alignment = WD_TABLE_ALIGNMENT.CENTER # 표 가로 정렬
    table.allow_autofit = False # 표 너비 자동 맞춤 해제

    tr = table.rows[0] # 첫 번째 행(헤더) 반환 # 26
    th_text = ["금융기관", "상품명", "이자계산",
               "만기(월)", "세전금리", "최고우대"]
    col_width = [Mm(40), Mm(50), Mm(20),
                 Mm(20), Mm(20), Mm(20)] # 열 너비
    for idx, th in enumerate(tr.cells):
        th.width = col_width[idx]
        th.vertical_alignment = WD_ALIGN_VERTICAL.CENTER
        p_th = th.paragraphs[0]
        p_th.alignment = WD_ALIGN_PARAGRAPH.LEFT # 가로 정렬
        r_th = p_th.add_run(f"{th_text[idx]}")
        apply_font(r_th, size_pt=12, is_bold=True) # 37

    df_raw = pd.read_excel(OUT_1_2) # 정기예금 데이터
    df_filter = df_raw.filter(["kor_co_nm", "fin_prdt_nm", # 40
                               "intr_rate_type_nm", "save_trm",
                               "intr_rate", "intr_rate2"]) # 필터링 # 42
    df_sort = df_filter.sort_values("intr_rate", # 43
                                    ascending=False) # 정렬 # 44
    
    for _, se_row in df_sort.head(n_rows).iterrows():
        tr = table.add_row() # 행 추가
        for idx, td in enumerate(tr.cells):
            td.width = col_width[idx] # 셀 너비
            td.vertical_alignment = WD_ALIGN_VERTICAL.CENTER # 셀 정렬
            p_td = td.paragraphs[0] # 첫 번째 딘릭
            if idx < 2: # 첫 두 개의 셀은 텍스트 배분 정렬 적용
                p_td.alignment = WD_ALIGN_PARAGRAPH.DISTRIBUTE
            p_td.paragraph_format.space_before = Mm(2) # 단락 앞 간격
            p_td.paragraph_format.space_after = Mm(2) # 단락 뒤 간격
            p_td.add_run(f"{se_row.iloc[idx]}") # 내용 셀 입력
        
        add_blank_paragraph(doc, size_pt=10) # 빈 단락
        doc.save(OUT_3_4)

if __name__ == "__main__": 
    insert_deposit_info(10) # 62

 

15 정기예금 상품 데이터를 입력하는 함수 insert_deposit_info()를 정의합니다. 매개변수 n_rows는 상품의 개수입니다.

26~27 표의 헤더를 사용할 데이터를 입력하고 서식을 지정합니다.

40~42 함수 filter()를 사용해서 정기예금 상품 데이터에서 필요한 열을 필터링합니다.

43~44 함수 sort_values()를 사용해서 세전금리를 기준으로 내림차순 정렬합니다.

62 금리를 기준으로 내림차순 정렬된 정기계음 상품 10개를 출력합니다.

 

'output' 폴더에 생성된 워드 파일 'step_3_4.docx'을 열어 정기예금 상품 데이터가 표에 잘 삽입되었는지 확인합니다. 삽입된 표에는 금융회사, 상품명, 이자계산 방법, 만기(월), 세전금리, 최고 우대 열이 순서대로 제시되었고, 표의 서식도 올바르게 적용되어 있습니다.