openpyxl, pandas, xlwings 뭐가 다를까? 파이썬 엑셀 라이브러리 3종 비교

이미지
openpyxl, pandas, xlwings 뭐가 다를까? 파이썬 엑셀 라이브러리 3종 비교 이 블로그에서 엑셀 자동화 글을 30편 가까이 쓰면서 openpyxl 과 pandas 를 상황에 따라 섞어 사용했습니다. "왜 어떤 글은 openpyxl을 쓰고 어떤 글은 pandas를 쓰는지" 궁금하셨던 분들이 계실 것 같아, 이번에는 완성 코드를 공개하는 대신 세 라이브러리의 차이를 직접 비교해 정리해보려 합니다. 파이썬으로 엑셀을 처음 다뤄보는 분이라면 이 글 하나로 어떤 도구를 배워야 할지 방향을 잡을 수 있을 것입니다. 세 라이브러리, 한 줄 요약 먼저 각각이 무엇을 위해 만들어졌는지부터 명확히 하고 시작하겠습니다. openpyxl → 엑셀 파일을 "직접 읽고 쓰는" 라이브러리. 셀 하나하나를 세밀하게 제어. pandas → 엑셀을 "데이터 표"로 취급해서 분석·가공하는 라이브러리. 통계·집계에 최적화. xlwings → 설치된 엑셀 프로그램 자체를 "리모컨처럼" 조작하는 라이브러리. 실시간 연동. 셋 다 "파이썬으로 엑셀을 다룬다"는 목적은 같지만, 접근 방식이 완전히 다릅니다. 아래에서 같은 작업을 세 가지 방식으로 각각 구현해보면 차이가 명확해집니다. 비교 1 — 셀에 값 쓰고 서식 적용하기 가장 기본적인 "A1 셀에 제목을 쓰고 굵게 표시하기" 작업을 세 라이브러리로 각각 구현하면 이렇게 다릅니다. openpyxl (가장 세밀한 제어) from openpyxl import Workbook from openpyxl.styles import Font wb = Workbook() ws = wb.active ws["A1"] = "월간 매출 보고서" ws["A1"].font = Font(bold=True, size=14, color="2E509...

파이썬으로 텔레그램 메시지 자동 발송하기

파이썬으로 텔레그램 메시지 자동 발송하기 (완성 코드 공개)

파이썬으로 텔레그램 메시지를 자동으로 발송하는 모습


"주식 데이터 수집 완료되면 알림 받고 싶다", "파이썬 스크립트가 오류 없이 잘 실행됐는지 확인하고 싶다", "매일 아침 날씨·환율 요약을 자동으로 받고 싶다"…

텔레그램 봇(Bot)을 활용하면 파이썬 코드 몇 줄만으로 이 모든 것이 가능합니다. 이전 게시글에서 소개한 카카오톡 자동 발송보다 API 설정이 훨씬 간단하고, 메시지뿐 아니라 이미지·파일·표 형식 메시지까지 무료로 발송할 수 있습니다. 텔레그램 앱만 설치되어 있으면 바로 시작할 수 있습니다.


1단계: 텔레그램 봇 만들기 (최초 1회만)

텔레그램 봇은 텔레그램 앱 안에서 직접 만들 수 있습니다. 아래 순서대로 진행하세요.

  1. 텔레그램 앱에서 검색창에 @BotFather를 검색합니다.
  2. BotFather 채팅창에서 /newbot을 입력합니다.
  3. 봇 이름 입력(예: "업무자동화 알림") → 봇 사용자명 입력(영문, 반드시 bot으로 끝나야 함, 예: mywork_alert_bot)
  4. 생성 완료 메시지와 함께 HTTP API 토큰이 발급됩니다. 이 값을 복사해 둡니다.
💡 Chat ID 확인 방법: 토큰 발급 후 텔레그램에서 방금 만든 봇을 검색해 /start를 입력합니다. 그 다음 브라우저 주소창에 아래 URL을 입력하면 JSON 응답에서 "chat" → "id" 값을 확인할 수 있습니다. 이것이 코드에서 사용할 Chat ID입니다.

https://api.telegram.org/bot여기에_토큰입력/getUpdates

2단계: 준비물 설치

터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:

pip install requests

텔레그램 봇 API는 HTTP 요청 방식으로 동작하기 때문에 requests 라이브러리만 있으면 됩니다. 이미 설치되어 있다면 넘어가도 됩니다.


3단계: 완성 코드

아래 코드를 그대로 복사해서 메모장에 붙여넣고, telegram_msg.py로 저장하세요. 저장 시 파일 형식은 "모든 파일", 인코딩은 UTF-8로 설정합니다.

import requests
from pathlib import Path

# ① 설정
BOT_TOKEN = "여기에_봇_토큰_입력"    # ← 1단계에서 발급받은 토큰
CHAT_ID   = "여기에_Chat_ID_입력"    # ← 1단계에서 확인한 Chat ID

BASE_URL = f"https://api.telegram.org/bot{BOT_TOKEN}"

# ② 텍스트 메시지 발송 함수
def send_message(text, parse_mode="HTML"):
    url  = f"{BASE_URL}/sendMessage"
    data = {
        "chat_id":    CHAT_ID,
        "text":       text,
        "parse_mode": parse_mode,   # HTML 또는 Markdown 서식 지원
    }
    res = requests.post(url, data=data)
    if res.status_code == 200:
        print(f"  ✔ 메시지 발송 완료")
    else:
        print(f"  ✘ 발송 실패: {res.status_code} / {res.text}")

# ③ 이미지 파일 발송 함수
def send_photo(image_path, caption=""):
    url  = f"{BASE_URL}/sendPhoto"
    with open(image_path, "rb") as img:
        res = requests.post(url, data={"chat_id": CHAT_ID, "caption": caption},
                            files={"photo": img})
    if res.status_code == 200:
        print(f"  ✔ 이미지 발송 완료: {Path(image_path).name}")
    else:
        print(f"  ✘ 발송 실패: {res.status_code} / {res.text}")

# ④ 파일 발송 함수
def send_document(file_path, caption=""):
    url  = f"{BASE_URL}/sendDocument"
    with open(file_path, "rb") as f:
        res = requests.post(url, data={"chat_id": CHAT_ID, "caption": caption},
                            files={"document": f})
    if res.status_code == 200:
        print(f"  ✔ 파일 발송 완료: {Path(file_path).name}")
    else:
        print(f"  ✘ 발송 실패: {res.status_code} / {res.text}")

# ⑤ 실행: 원하는 발송 함수 호출
# 텍스트 메시지 (HTML 서식 지원)
send_message("""📊 오늘의 업무 자동화 완료 알림

✅ 주식·환율 데이터 수집 완료
✅ 엑셀 보고서 차트 저장 완료
✅ 거래처 이메일 발송 완료

⏰ 완료 시각: 오후 3시 42분""")

# 이미지 발송 (차트 이미지 등)
# send_photo(r"C:\Users\내이름\Desktop\매출차트.png", caption="5월 매출 차트")

# 파일 발송 (엑셀, PDF 등)
# send_document(r"C:\Users\내이름\Desktop\보고서.xlsx", caption="5월 업무 보고서")

print("\n✅ 완료! 텔레그램으로 메시지를 발송했습니다.")

4단계: 실행 방법

  1. 코드 ① 설정의 BOT_TOKENCHAT_ID에 각각 발급받은 값을 입력합니다.
  2. 코드 ⑤ 실행의 send_message() 안 내용을 원하는 메시지로 수정합니다.
  3. 이미지나 파일도 함께 보내고 싶다면 해당 줄의 #을 삭제하고 파일 경로를 입력합니다.
  4. 터미널에서 아래 명령어로 실행합니다:
python telegram_msg.py

정상 실행 시 터미널에 이렇게 출력됩니다:

  ✔ 메시지 발송 완료

✅ 완료! 텔레그램으로 메시지를 발송했습니다.

텔레그램 앱을 열면 만들어둔 봇 채팅방에 메시지가 도착해 있습니다. 굵은 글씨(<b>), 기울임(<i>), 코드 형식(<code>) 같은 HTML 서식도 그대로 렌더링됩니다.


5단계: 자주 발생하는 오류와 해결법

오류 1: 401 Unauthorized

봇 토큰이 잘못 입력된 경우입니다. BotFather에서 발급받은 토큰을 다시 확인하세요. 토큰 앞뒤에 공백이 없는지도 확인합니다.

오류 2: 400 Bad Request — chat not found

Chat ID가 잘못 입력된 경우입니다. 봇에게 /start 메시지를 보낸 후 getUpdates URL을 다시 호출해 Chat ID를 재확인하세요. /start를 보내지 않으면 Chat ID가 생성되지 않습니다.

오류 3: 메시지는 가는데 서식(굵기, 색상)이 적용 안 됨

parse_mode가 제대로 설정되어 있는지 확인하세요. HTML 서식을 사용하려면 parse_mode="HTML"이 반드시 포함되어야 합니다. 마크다운 방식을 선호하면 parse_mode="Markdown"으로 변경하고 *굵은글씨*, `코드` 형식으로 작성합니다.


응용: 파이썬 스크립트 오류 발생 시 자동 알림 받기

장시간 실행되는 자동화 스크립트에 텔레그램 알림을 추가하면, 오류가 발생했을 때 즉시 알림을 받을 수 있습니다. 기존 스크립트의 try/except 구문에 아래처럼 추가하면 됩니다.

from telegram_msg import send_message
import traceback

try:
    # 기존 자동화 코드
    pass

except Exception as e:
    error_msg = f"""🚨 스크립트 오류 발생!

❌ 오류 내용: {str(e)}
📄 상세:
{traceback.format_exc()[:500]}"""
    send_message(error_msg)
    raise
💡 이전 게시글과 결합하면: 주식·환율 자동 수집 편의 스크립트 마지막에 이 코드를 붙이면 매일 장 마감 후 수집 결과와 차트 이미지를 텔레그램으로 자동 수신할 수 있습니다. 차트 자동 저장 편과 결합하면 차트 이미지 파일을 텔레그램으로 바로 발송하는 것도 가능합니다.

핵심 요약

  • 준비물: 텔레그램 앱 + BotFather에서 봇 생성 + pip install requests
  • 설정: BOT_TOKEN과 CHAT_ID 입력 후 메시지 내용 수정
  • 실행: 터미널에서 python telegram_msg.py 입력
  • 결과: 텍스트·이미지·파일 발송 모두 지원, HTML 서식 그대로 렌더링

이 코드를 응용하면 특정 조건(주가 급등락, 스크립트 오류)이 충족될 때만 알림을 발송하는 조건부 알림 시스템도 만들 수 있습니다.

이 블로그의 인기 게시물

느려진 구글 크롬 속도 2배 빨라지는 3가지 설정 방법 (2026년 최신 가이드)

카카오톡 용량 줄이기! 대화방 파일 삭제로 스마트폰 용량 확보법 (1분 해결)

업무 속도 3배 빨라지는 윈도우 기본 캡처 도구 단축키 및 200% 활용 꿀팁