8. 스크립트 및 자동화
파이썬을 사용하여 일상적인 작업을 자동화하는 방법을 배웁니다. 이를 통해 비효율적인 수동 작업을 줄이고, 일관된 결과를 얻을 수 있습니다.
8.1. 파일 및 디렉터리 자동화
파이썬은 파일 및 디렉터리를 조작하는 강력한 기능을 제공합니다. 이를 통해 대량의 파일을 처리하거나 복잡한 파일 시스템 작업을 자동화할 수 있습니다.
8.1.1. 파일 및 디렉터리 조작
파일 시스템은 컴퓨터의 파일과 디렉터리를 구조화하는 방법입니다. 파이썬에서는 os 모듈을 사용하여 파일 시스템을 조작할 수 있습니다.
8.1.1.1. 파일/디렉터리 생성, 삭제, 이동
파이썬의 os 모듈을 사용하면 파일이나 디렉터리를 생성, 삭제, 이동할 수 있습니다.
import os
# 디렉터리 생성
os.mkdir('test_dir')
# 파일 생성
with open('test_dir/test_file.txt', 'w') as file:
file.write('Hello, Python!')
# 디렉터리 이동
os.rename('test_dir', 'new_dir')
# 파일 이동
os.rename('new_dir/test_file.txt', 'new_dir/moved_file.txt')
# 파일 삭제
os.remove('new_dir/moved_file.txt')
# 디렉터리 삭제
os.rmdir('new_dir')
8.1.1.2. 파일 내용 읽기 및 쓰기
파이썬의 내장 함수 open()을 사용하면 파일을 읽거나 쓸 수 있습니다. 'r' 모드는 파일을 읽기 위한 모드이며, 'w' 모드는 파일에 쓰기 위한 모드입니다.
# 파일에 쓰기
with open('test.txt', 'w') as file:
file.write('Hello, Python!')
# 파일 읽기
with open('test.txt', 'r') as file:
print(file.read())
8.1.2. 패턴 매칭 및 검색
파일 시스템에서 특정 패턴에 일치하는 파일을 찾거나, 파일의 내용에서 특정 패턴을 찾는 것은 매우 흔한 작업입니다. 파이썬에서는 glob 모듈과 re 모듈을 사용하여 이를 수행할 수 있습니다.
8.1.2.1. glob를 이용한 패턴 매칭
glob 모듈은 유닉스 셸 스타일의 패턴 매칭을 제공합니다. 별표(*)와 물음표(?) 등의 와일드카드 문자를 사용하여 파일 패턴을 정의하고, 이에 일치하는 파일을 찾을 수 있습니다.
import glob
# 현재 디렉터리의 모든 txt 파일 찾기
for file in glob.glob('*.txt'):
print(file)
8.1.2.2. regex를 이용한 패턴 검색
파이썬의 re 모듈은 정규 표현식을 사용하여 문자열에서 패턴을 찾는 기능을 제공합니다. 이를 사용하여 파일의 내용에서 특정 패턴을 찾을 수 있습니다.
import re
# 파일 열기
with open('test.txt', 'r') as file:
contents = file.read()
# "Python"이라는 단어 찾기
matches = re.findall('Python', contents)
for match in matches:
print(match)
8.2. 웹 스크레이핑
웹 스크레이핑은 웹 페이지에서 필요한 정보를 추출하는 과정입니다. 파이썬에서는 BeautifulSoup과 Selenium 등의 도구를 사용하여 웹 스크레이핑을 수행할 수 있습니다.
8.2.1. 웹 스크레이핑 기초
웹 스크레이핑은 웹 페이지의 HTML을 파싱하여 필요한 정보를 추출하는 과정입니다. 이때 HTML의 구조를 이해하는 것이 중요합니다.
8.2.1.1. 웹 스크레이핑 개념
웹 페이지는 HTML, CSS, JavaScript 등으로 구성되어 있습니다. 웹 스크레이핑은 이 중 HTML을 파싱하여 필요한 정보를 추출하는 과정입니다. HTML은 태그로 이루어진 트리 구조를 가지고 있으며, 각 태그에는 정보를 포함하고 있는 속성과 내용이 있습니다.
8.2.1.2. 웹 스크레이핑 도구 소개 (BeautifulSoup, Selenium)
BeautifulSoup은 HTML과 XML 문서를 파싱하기 위한 파이썬 라이브러리입니다. 간단하고 직관적인 API를 제공하여 웹 스크레이핑을 쉽게 할 수 있습니다. 반면, Selenium은 웹 브라우저를 자동화하기 위한 도구입니다. JavaScript로 만들어진 동적인 웹 페이지를 스크레이핑 할 때 유용합니다.
from bs4 import BeautifulSoup
import requests
# 웹 페이지 요청
response = requests.get('http://example.com')
# BeautifulSoup 객체 생성
soup = BeautifulSoup(response.text, 'html.parser')
# 웹 페이지의 타이틀 태그 내용 출력
print(soup.title.string)
8.2.2. 웹 스크레이핑 실습
웹 스크레이핑 실습에서는 BeautifulSoup와 Selenium을 사용하여 웹 페이지에서 정보를 추출하는 방법을 배웁니다.
8.2.2.1. 정적 웹페이지 스크레이핑
BeautifulSoup을 사용하여 정적 웹페이지를 스크레이핑 해봅시다. 정적 웹페이지는 서버에서 HTML을 받아오고, 그대로 브라우저에 표시하는 웹페이지를 말합니다.
from bs4 import BeautifulSoup
import requests
# 웹 페이지 요청
response = requests.get('http://example.com')
# BeautifulSoup 객체 생성
soup = BeautifulSoup(response.text, 'html.parser')
# 웹 페이지의 타이틀 태그 내용 출력
print(soup.title.string)
8.2.2.2. 동적 웹페이지 스크레이핑
Selenium을 사용하여 동적 웹페이지를 스크레이핑 해봅시다. 동적 웹페이지는 JavaScript를 이용해 웹페이지의 내용이 사용자의 상호작용에 따라 변경되는 웹페이지를 말합니다.
from selenium import webdriver
# 웹 드라이버 초기화 (별도의 웹 드라이버 설치 필요)
driver = webdriver.Chrome('path/to/chromedriver')
# 웹 페이지 요청
driver.get('http://example.com')
# 웹 페이지의 타이틀 태그 내용 출력
print(driver.title)
# 브라우저 종료
driver.quit()
8.3. 작업 스케줄링
파이썬 스크립트를 특정 시간에 자동으로 실행하게 하려면 작업 스케줄링이 필요합니다. 이를 통해 주기적으로 실행해야 하는 작업을 자동화할 수 있습니다.
8.3.1. 작업 스케줄링 기초
작업 스케줄링은 특정 시간에 특정 작업을 실행하도록 예약하는 것을 말합니다. 이를 통해 주기적으로 실행해야 하는 작업을 자동화할 수 있습니다.
8.3.1.1. 작업 스케줄링 개념
작업 스케줄링은 특정 시간에 특정 작업을 실행하도록 예약하는 것을 말합니다. 이를 통해 주기적으로 실행해야 하는 작업을 자동화할 수 있습니다. 이 때, 작업은 주로 스크립트나 명령어가 될 수 있습니다.
8.3.1.2. 작업 스케줄링 도구 소개 (Cron, Task Scheduler)
리눅스에서는 Cron이라는 도구를 사용하여 작업 스케줄링을 할 수 있습니다. Cron은 시간 기반의 작업 스케줄러로, 주기적으로 실행되어야 하는 작업을 등록할 수 있습니다. 윈도우에서는 작업 스케줄러를 사용하여 작업 스케줄링을 할 수 있습니다.
8.3.2. 작업 스케줄링 실습
이제 실제로 작업 스케줄링을 해보겠습니다. 먼저 리눅스에서 Cron을 사용하는 방법을 알아보겠습니다. 그 다음으로 윈도우에서 작업 스케줄러를 사용하는 방법을 알아보겠습니다.
8.3.2.1. 리눅스에서 Cron을 이용한 작업 스케줄링
리눅스에서는 Cron을 사용하여 작업 스케줄링을 할 수 있습니다. 먼저 crontab -e 명령을 실행하여 크론탭을 열고, 다음과 같이 작업을 등록합니다. 이 예제는 매분마다 hello.sh 스크립트를 실행하도록 설정합니다.
* * * * * /path/to/hello.sh
8.3.2.2. 윈도우에서 작업 스케줄러를 이용한 작업 스케줄링
윈도우에서는 작업 스케줄러를 사용하여 작업 스케줄링을 할 수 있습니다. 작업 스케줄러를 열고, 작업 생성을 클릭하여 새 작업을 생성합니다. 작업의 속성을 설정하고, 트리거를 추가하여 작업이 실행되는 시간을 설정합니다. 마지막으로 작업을 실행할 프로그램을 선택합니다.
8.4. 이메일 자동화
이메일 자동화는 이메일을 보내고 받는 과정을 자동화하는 것을 말합니다. 이를 통해 대량의 이메일을 보내거나, 이메일을 분석하는 등의 작업을 자동화할 수 있습니다.
8.4.1. 이메일 자동화 기초
이메일 자동화는 이메일을 보내고 받는 과정을 자동화하는 것을 말합니다. 이를 통해 대량의 이메일을 보내거나, 이메일을 분석하는 등의 작업을 자동화할 수 있습니다.
8.4.1.1. 이메일 자동화 개념
이메일 자동화는 이메일을 보내고 받는 과정을 프로그래밍으로 제어하여, 이메일 관련 작업을 자동화하는 것을 말합니다. 이는 대량의 이메일을 보내야 하거나, 받은 이메일을 분석하고 관리해야 하는 경우에 매우 유용합니다.
8.4.1.2. 이메일 자동화 도구 소개 (smtplib, email)
파이썬에서는 smtplib와 email 라이브러리를 이용하여 이메일을 보내고 받는 작업을 자동화할 수 있습니다. smtplib는 SMTP 프로토콜을 이용하여 이메일을 보내는 기능을 제공하고, email 라이브러리는 이메일 메시지를 생성하고 파싱하는 기능을 제공합니다.
8.4.2. 이메일 자동화 실습
이제 실제로 이메일 자동화를 해보겠습니다. 먼저 이메일을 보내는 방법을 살펴보겠습니다. 그 다음으로 이메일을 받아서 분석하는 방법을 알아보겠습니다.
8.4.2.1. 이메일 보내기 자동화
파이썬의 smtplib와 email 라이브러리를 이용하여 이메일을 보낼 수 있습니다. 아래는 간단한 이메일 보내기 스크립트입니다. 당신의 이메일 서버의 설정에 따라서 이 코드를 조정해야 할 수도 있습니다.
import smtplib
from email.mime.text import MIMEText
# 이메일 메시지 생성
msg = MIMEText('이메일 본문입니다.')
msg['Subject'] = '테스트 이메일'
msg['From'] = 'me@example.com'
msg['To'] = 'you@example.com'
# SMTP 서버 연결 및 로그인
server = smtplib.SMTP('smtp.example.com')
server.login('username', 'password')
# 이메일 전송
server.send_message(msg)
# SMTP 서버 연결 종료
server.quit()
8.4.2.2. 이메일 받기 및 분석 자동화
이메일을 받아서 분석하는 작업은 조금 더 복잡합니다. 이메일 서버로부터 이메일을 받아오는 것은 IMAP나 POP3와 같은 프로토콜을 사용하며, 이메일 메시지를 분석하는 것은 email 라이브러리를 사용합니다. 아래는 간단한 이메일 받기 및 분석 스크립트입니다.
import imaplib
import email
from email.header import decode_header
# IMAP 서버 연결
mail = imaplib.IMAP4_SSL('imap.example.com')
# 로그인
mail.login('username', 'password')
# 메일박스 선택
mail.select('inbox')
# 모든 메일 검색
result, data = mail.uid('search', None, 'ALL')
# 가장 최근의 이메일 가져오기
latest_email_uid = data[0].split()[-1]
result, data = mail.uid('fetch', latest_email_uid, '(BODY[TEXT])')
# 이메일 본문 추출 및 디코딩
raw_email = data[0][1].decode('utf-8')
email_message = email.message_from_string(raw_email)
# 이메일 본문 출력
print(email_message.get_payload())
이렇게 파이썬의 이메일 자동화 방법은 이메일을 보내고 받는 데 필요한 모든 기능을 제공하고 있으므로, 자신만의 이메일 자동화 시스템을 만들 수 있도록 해 줍니다.
2023.05.14 - [GD's IT Lectures : 기초부터 시리즈/파이썬(Python) 기초부터 ~] - [파이썬(PYTHON) : 고급] GUI 프로그래밍
'GD's IT Lectures : 기초부터 시리즈 > 파이썬(Python) 기초부터 ~' 카테고리의 다른 글
[파이썬(PYTHON) : 고급] GUI 프로그래밍 (0) | 2023.05.14 |
---|---|
[파이썬(PYTHON) : 고급] 머신러닝 및 딥러닝 (0) | 2023.05.14 |
[파이썬(PYTHON) : 고급] 웹 프레임워크 및 API 개발 (1) | 2023.05.13 |
[파이썬(PYTHON) : 고급] 데이터베이스 연동 (2) | 2023.05.13 |
[파이썬(PYTHON) : 고급] 성능 최적화 (0) | 2023.05.13 |
댓글