Python

Python 업무 자동화: 실전 예제 5가지 (생산성 UP!)

2026-03-06
15분

Python으로 지루한 업무, 이제 안녕!

안녕하세요! Code Flow 블로그에 오신 것을 환영합니다. 오늘은 여러분의 소중한 시간을 아껴줄 Python 업무 자동화에 대해 이야기해볼까 합니다. 엑셀 시트 정리, 이메일 보내기, 파일 이름 변경 등, 매일 반복되는 지루한 작업들, 이제 Python에게 맡기고 우리는 더 창의적인 일에 집중해보자구요! 특히 바이브 코딩 시대에는 더욱 필수적인 역량이라고 할 수 있겠죠. AI와 협업하기 위해서라도 자동화 스크립트 작성 능력은 매우 중요합니다.

본격적으로 시작하기 전에, Python 설치가 안 되어 있다면 먼저 설치해주세요! (Anaconda를 추천합니다.) 필요한 라이브러리들은 각 예제에서 설명드릴게요.

예제 1: 엑셀 데이터 자동 정리 & 분석

상황 가정: 매일 보고받는 엑셀 파일 정리

매일 아침, 여러 팀에서 보내오는 엑셀 파일들을 받아서 통합하고, 특정 조건에 맞는 데이터만 추출해야 하는 상황을 가정해봅시다. 손으로 일일이 하기에는 너무 귀찮고 시간이 오래 걸리죠? Python의 pandas 라이브러리를 사용하면 정말 간단하게 해결할 수 있습니다.

import pandas as pd
import os

# 엑셀 파일들이 있는 폴더 경로
folder_path = './excel_files'

# 결과를 저장할 빈 DataFrame
all_data = pd.DataFrame()

# 폴더 안의 모든 파일에 대해 반복
for filename in os.listdir(folder_path):
    if filename.endswith('.xlsx') or filename.endswith('.xls'):
        # 엑셀 파일 읽기
        file_path = os.path.join(folder_path, filename)
        df = pd.read_excel(file_path)

        # 데이터 전처리 (예: 특정 컬럼 제거, 이름 변경 등)
        # 예시: 'Unnamed: 0' 컬럼 제거
        if 'Unnamed: 0' in df.columns:
            df = df.drop('Unnamed: 0', axis=1)

        # 전체 데이터에 추가
        all_data = pd.concat([all_data, df], ignore_index=True)

# 특정 조건에 맞는 데이터 필터링 (예: '매출액'이 1000만원 이상인 데이터)
filtered_data = all_data[all_data['매출액'] >= 10000000]

# 결과 저장
filtered_data.to_excel('filtered_data.xlsx', index=False)

print('엑셀 데이터 정리 완료!')

꿀팁: pandas는 데이터 분석의 핵심 라이브러리입니다. 다양한 데이터 필터링, 정렬, 그룹핑 기능을 제공하니 더 자세히 공부해보세요! 바이브 코딩 시대에는 데이터를 빠르고 정확하게 분석하는 능력이 더욱 중요해질 겁니다.

예제 2: 이메일 자동 발송

상황 가정: 매주 월요일마다 팀원들에게 주간 보고서 발송

매주 월요일 아침마다 팀원들에게 주간 보고서를 이메일로 보내야 하는 상황, 정말 번거롭죠? Python의 smtplibemail 라이브러리를 사용하면 자동으로 이메일을 발송할 수 있습니다.

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

# 발신자 정보
sender_email = 'your_email@gmail.com'
sender_password = 'your_password'

# 수신자 정보
receiver_email = 'recipient_email@gmail.com'

# 메시지 생성
message = MIMEMultipart()
message['From'] = sender_email
message['To'] = receiver_email
message['Subject'] = '주간 보고서 (2026-03-03 ~ 2026-03-07)'

# 이메일 본문
body = '안녕하세요, 팀원 여러분. 이번 주 주간 보고서입니다. 첨부 파일을 확인해주세요.'
message.attach(MIMEText(body, 'plain'))

# 첨부 파일 추가 (예: 엑셀 파일)
# with open('weekly_report.xlsx', 'rb') as attachment:
#     part = MIMEBase('application', 'octet-stream')
#     part.set_payload(attachment.read())
#     encoders.encode_base64(part)
#     part.add_header('Content-Disposition', f'attachment; filename= weekly_report.xlsx')
#     message.attach(part)

# SMTP 서버 연결 및 이메일 발송
with smtplib.SMTP('smtp.gmail.com', 587) as server:
    server.starttls()
    server.login(sender_email, sender_password)
    server.sendmail(sender_email, receiver_email, message.as_string())

print('이메일 발송 완료!')

주의: Gmail의 경우, 보안 설정을 변경해야 이메일 발송이 가능할 수 있습니다. (앱 비밀번호 생성 등) 또한, 스팸으로 처리되지 않도록 주의해주세요.

예제 3: 웹 스크래핑으로 데이터 수집

상황 가정: 특정 웹사이트의 최신 뉴스 제목 & 링크 수집

경쟁사 분석, 시장 조사 등을 위해 특정 웹사이트의 정보를 꾸준히 수집해야 하는 경우, 웹 스크래핑이 유용합니다. Python의 requestsBeautiful Soup 라이브러리를 사용하면 웹 페이지의 HTML 코드를 파싱하여 원하는 데이터를 추출할 수 있습니다.

import requests
from bs4 import BeautifulSoup

# 웹사이트 URL
url = 'https://example.com/news'

# HTTP 요청
response = requests.get(url)
response.raise_for_status()  # 에러 발생 시 예외 처리

# HTML 파싱
soup = BeautifulSoup(response.text, 'html.parser')

# 뉴스 제목과 링크 추출 (예: h2 태그 안에 있는 a 태그)
news_list = soup.find_all('h2', class_='news-title') # 예시 클래스

for news in news_list:
    a_tag = news.find('a')
    if a_tag:
        title = a_tag.text.strip()
        link = a_tag['href']
        print(f'제목: {title}')
        print(f'링크: {link}')
        print('-' * 20)

주의: 웹사이트의 robots.txt 파일을 확인하여 스크래핑이 허용되는지 확인하고, 과도한 요청으로 서버에 부담을 주지 않도록 주의해야 합니다. 또한, 웹사이트 구조가 변경되면 스크래핑 코드도 수정해야 합니다.

예제 4: 파일 이름 일괄 변경

상황 가정: 다운로드 받은 파일들의 이름 형식을 통일

사진, 문서 등 여러 파일을 다운로드 받았는데, 이름 형식이 제각각이라 정리하기 힘들 때가 있죠? Python을 사용하면 파일 이름을 일괄적으로 변경할 수 있습니다.

import os

# 파일들이 있는 폴더 경로
folder_path = './files'

# 변경할 이름 형식 (예: '보고서_날짜_순번.pdf')
new_name_format = '보고서_{}_{}.pdf'

# 폴더 안의 모든 파일에 대해 반복
for i, filename in enumerate(os.listdir(folder_path)):
    # 파일 확장자 분리
    name, ext = os.path.splitext(filename)

    # 새로운 파일 이름 생성
    new_filename = new_name_format.format('20260306', i + 1)

    # 기존 파일 경로와 새로운 파일 경로
    old_path = os.path.join(folder_path, filename)
    new_path = os.path.join(folder_path, new_filename)

    # 파일 이름 변경
    os.rename(old_path, new_path)

    print(f'파일명 변경: {filename} -> {new_filename}')

print('파일 이름 변경 완료!')

팁: 파일 이름 변경 규칙을 정규표현식을 사용하여 더 복잡하게 설정할 수도 있습니다.

예제 5: 간단한 GUI 자동화

상황 가정: 특정 프로그램을 자동으로 실행하고 특정 버튼 클릭

GUI (Graphical User Interface) 기반의 프로그램을 자동화해야 할 때, Python의 pyautogui 라이브러리를 사용할 수 있습니다. 마우스 클릭, 키보드 입력 등을 자동으로 수행할 수 있습니다.

import pyautogui
import time

# 1. 프로그램 실행 (예: 메모장)
pyautogui.press('win') # 윈도우 키 누르기
time.sleep(1) # 딜레이
pyautogui.write('notepad') # 메모장 검색
time.sleep(1)
pyautogui.press('enter') # 엔터 키 누르기
time.sleep(2)

# 2. 특정 위치 클릭 (예: 파일 -> 열기)
# pyautogui.moveTo(100, 50, duration=1) # 마우스 커서 이동
# pyautogui.click() # 클릭

# 3. 키보드 입력 (예: 파일 이름 입력)
# pyautogui.write('test.txt')
# pyautogui.press('enter')

print('GUI 자동화 완료!')

주의: pyautogui는 화면 해상도, 프로그램 위치 등에 따라 동작이 달라질 수 있습니다. pyautogui.position() 함수를 사용하여 정확한 좌표를 확인하고, time.sleep()으로 적절한 딜레이를 주는 것이 중요합니다. 바이브 코딩 시대에는 AI 모델을 학습시키기 위한 데이터 수집 자동화에 활용될 가능성이 높습니다.

이 외에도 Python은 정말 다양한 분야에서 자동화를 구현할 수 있습니다. 웹 서버 구축, 데이터베이스 관리, 머신러닝 모델 학습 등, 무궁무진한 가능성이 열려있죠. 오늘 소개해드린 예제들을 시작으로, 여러분만의 자동화 스크립트를 만들어보세요!

마지막으로! Python 자동화는 단순히 코딩 스킬을 넘어, 문제 해결 능력과 창의력을 향상시키는 데에도 큰 도움이 됩니다. AI 시대에 더욱 중요해지는 '자동화 사고'를 키워나가는 데 Python은 훌륭한 도구가 될 것입니다.

Code Flow에서 직접 코딩해보세요. 다양한 Python 튜토리얼과 프로젝트를 통해 실력 향상을 경험할 수 있습니다!