이번에는 파이썬에서 엑셀을 다루는 라이브러리인 openpyxl과 스케줄러 라이브러리인 schedule을 알아보자.
openpyxl
openpyxl은 엑셀을 다룰 수 있는 파이썬 라이브러리다. 나중에 csv 파일을 엑셀로 옮겨서 작업할 때 좋을 것 같다. 회사 생활을 하다 보면 엑셀을 다뤄야 하는 경우가 많을 테니까 말이다.
기본적으로 엑셀은 파일을 나타내는 워크북과 하나의 시트를 나타내는 워크시트로 이루어져 있다. 하나의 워크북 안에 여러 개의 워크시트가 있는 것이다. 이를 참고하여 다음 명령어를 살펴보자.
- Workbook() : 새 엑셀 파일 생성
- ws.append() : 워크시트에 리스트 형태 데이터를 행 단위로 추가
- sheet['A1'] = value : 특정 셀 안에 데이터 추가
- PatternFill : 특정 셀에 색상 강조
- save('report.xlsx'
엑셀 파일 만들기 실습
from openpyxl import Workbook
from openpyxl.styles import PatternFill, Font # 이거 말고 더 있음~
from html_parser_me import get_news
def create_excel_news(news_list):
wb = Workbook()
ws = wb.active
ws.title = "Security News"
# 헤더
header = ["순번", "제목", "작성자", "URL"]
ws.append(header) # 행 추가
# 헤더 스타일링
header_font = Font(color='FFFFFF', bold=True)
header_fill = PatternFill(start_color="DA6596", fill_type="solid")
for cell in ws[1]:
cell.font = header_font
cell.fill = header_fill
for idx, news in enumerate(news_list):
row = [idx, news["title"], news["writer"], news["href"]]
ws.append(row)
wb.save("BoanReport.xlsx")
print("생성 완료!")
if __name__ == "__main__":
news_list = get_news()
create_excel_news(news_list)
datetime & schedule
파이썬에서 스케줄링을 사용하기 위해선 두 가지 라이브러리를 알아야 한다.
- datetime : 시간 객체
- schedule : 작업 예약 라이브러리
datetime은 시간 데이터를 담는 객체로 크게 date, time, datetime을 사용한다. 크게 알아야 할 것은 strftime() 함수로 시간 객체를 문자열로 바꾸는 함수이다.
크게 객체는 시간 계산, 문자열은 시간 출력이라고 이해하면 편하다. 정밀한 시간 기록은 now.timestamp()를 활용한다.
나중에 위협 로그 감지나 특정 시간의 보안 보고서를 제출하기 위해 파일을 만들 때 파일 이름에 현재 시간 타임스탬프를 기입하는 걸로 활용할 수 있다.
schedule은 파이썬이 실행될 때 특정 시간에 작업을 예약하는 것이다. 물론 윈도우에는 작업 스케줄러, 리눅스에는 crontab이 있다. schedule을 이용하면 영어 문장 읽듯이 코드를 짤 수 있어 가독성이 뛰어나고 직관적이다. 초, 분, 시간, 요일 단위로 아주 세밀하게 설정 가능해 유연성도 갖추고 있다.
ex)
- every().day.at("09:00")
- 초/분/시간 단위 schedule.every(10).seconds.do(job)
- 일 단위 (특정 시간) schedule.every().day.at("09:00").do(job)
- 주 단위 (특정 요일) schedule.every().monday.do(job)
실습
# 작업 자동화
def daily_work():
now = datetime.now().strftime('%Y년 %m월 %d일 %H:%M:%S')
print(f"[{now}] 자동화 작업 시작...")
news_list = get_news()
send_boan_news(news_list)
now = datetime.now().strftime('%Y년 %m월 %d일 %H:%M:%S')
print(f"[{now}] 자동화 작업 완료!")
# 프로세스 상주
if __name__ == "__main__":
# Task 등록
schedule.every(1).minutes.do(daily_work)
# schedule.every(3).seconds.do(daily_work)
# Main Loop
print("스케줄러가 동작됩니다. 종료하려면 ctrl+c를 눌러주십쇼.")
while True:
schedule.run_pending()
time.sleep(1)'Security > SK Shieldus Rookies' 카테고리의 다른 글
| [SK 쉴더스 루키즈] SMTP (0) | 2026.05.10 |
|---|---|
| [SK 쉴더스 루키즈] BeautifulSoup (0) | 2026.05.10 |
| [SK 쉴더스 루키즈] Notion API 연동 실습 (0) | 2026.05.06 |
| [SK 쉴더스 루키즈] Python 문법 1 (0) | 2026.04.29 |
| [SK 쉴더스 루키즈] Git & Github (0) | 2026.04.28 |
