일상 작업을 자동화하는 10가지 Python 스크립트

Python의 진정한 힘은 바로 자동화에 있습니다. 일상 작업에 이 힘을 활용하지 않으시겠습니까?

다음의 10가지 Python 스크립트는 초보자부터 숙련된 개발자까지 반복적인 작업을 자동화하고, 시간을 절약하며, 효율성을 높이는 데 도움을 줄 것입니다.

전문가 수준이 아니더라도 지금 바로 시작할 수 있습니다!

1. 이미지 최적화 도구: Photoshop이 필요 없어요!

웹사이트나 소셜 미디어에 이미지를 최적화해야 할 때 Photoshop을 열기 귀찮으셨죠? 이제는 간단한 Python 스크립트로 해결할 수 있습니다. Pillow 라이브러리를 사용해 이미지 크기 조정, 회전, 필터 적용 등 다양한 작업을 수행할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from PIL import Image, ImageFilter, ImageOps, ImageEnhance

# 이미지 로드
im = Image.open("Image1.jpg")

# 이미지 작업 예제
im = im.crop((34, 23, 100, 100)) # 자르기
im = im.resize((50, 50)) # 크기 조정
im = im.transpose(Image.FLIP_LEFT_RIGHT) # 좌우 반전
im = im.rotate(360) # 회전
im.save("Image1.jpg", optimize=True, quality=90) # 압축 저장

# 필터 및 효과 적용
im = im.filter(ImageFilter.BLUR) # 블러 효과
im = im.filter(ImageFilter.SHARPEN) # 선명도 효과
im = ImageOps.grayscale(im) # 흑백 변환
im = ImageOps.invert(im) # 색상 반전
im.save("Image1_optimized.jpg")

2. 비디오 최적화: 전문가급 비디오 만들기

요즘 시대에서 비디오 편집은 단지 유튜버만의 영역이 아닙니다. MoviePy를 통해 자르기, 속도 조절, 효과 추가 등 기본적인 기능뿐만 아니라 멋진 효과까지 손쉽게 추가할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import moviepy.editor as pyedit

# 비디오 로드
video = pyedit.VideoFileClip("vid.mp4")

# 비디오 자르기
vid1 = video.subclip(0, 10) # 0초부터 10초까지
vid2 = video.subclip(20, 40) # 20초부터 40초까지
final_vid = pyedit.concatenate_videoclips([vid1, vid2]) # 두 클립 합치기

# 비디오 속도 증가
final_vid = final_vid.speedx(2) # 2배 속도

# 오디오 추가
aud = pyedit.AudioFileClip("bg.mp3") # 오디오 파일 로드
final_vid = final_vid.set_audio(aud) # 비디오에 오디오 설정

# 비디오 뒤집기 (역재생)
final_vid = final_vid.fx(pyedit.vfx.time_mirror)

# 두 비디오 병합
vid1 = pyedit.VideoFileClip("vid1.mp4")
vid2 = pyedit.VideoFileClip("vid2.mp4")
final_vid = pyedit.concatenate_videoclips([vid1, vid2])

# 비디오에 시각 효과(VFX) 추가
vid1 = final_vid.fx(pyedit.vfx.mirror_x) # 좌우 반전 효과
vid2 = final_vid.fx(pyedit.vfx.invert_colors) # 색상 반전 효과
final_vid = pyedit.concatenate_videoclips([vid1, vid2])

# 비디오에 이미지 추가
img1 = pyedit.ImageClip("img1.jpg") # 이미지 1
img2 = pyedit.ImageClip("img2.jpg") # 이미지 2
final_vid = pyedit.concatenate_videoclips([img1, img2]) # 이미지와 비디오 합치기

# 최종 비디오 저장
final_vid.write_videofile("final.mp4")

3. 이메일 스케줄러: 이메일 잊지 마세요!

smtplibschedule을 사용하여 이메일을 자동으로 예약하고 발송할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import smtplib
import schedule
import time

def send_email():
sender_email = "your_email@gmail.com"
receiver_email = "recipient_email@gmail.com"
password = "your_email_password"

subject = "자동 이메일"
body = "이것은 Python으로 전송된 자동 이메일입니다."

message = f"Subject: {subject}\n\n{body}"

with smtplib.SMTP_SSL("smtp.gmail.com", 465) as server:
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message)

# 매일 오전 8시에 이메일을 보내도록 예약
schedule.every().day.at("08:00").do(send_email)

while True:
schedule.run_pending()
time.sleep(1)

4. 소셜 미디어 자동 게시 도구

Tweepy 라이브러리를 사용해 Twitter와 같은 플랫폼에 자동으로 게시물을 올릴 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import tweepy
import schedule
import time

def post_to_twitter():
api_key = "YOUR_API_KEY"
api_secret = "YOUR_API_SECRET"
access_token = "YOUR_ACCESS_TOKEN"
access_token_secret = "YOUR_ACCESS_TOKEN_SECRET"

auth = tweepy.OAuthHandler(api_key, api_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

tweet = "이것은 Python으로 자동 게시된 트윗입니다!"
api.update_status(tweet)

# 6시간마다 게시되도록 예약합니다.
schedule.every(6).hours.do(post_to_twitter)

while True:
schedule.run_pending()
time.sleep(1)

5. PDF를 이미지로 변환

PyMuPDF를 사용하여 PDF 페이지를 고화질 이미지로 변환합니다.

1
2
3
4
5
6
7
8
9
10
import fitz

def pdf_to_images(pdf_file):
doc = fitz.open(pdf_file)
for page in doc:
pix = page.get_pixmap()
output = f"page{page.number}.png"
pix.writePNG(output)

pdf_to_images("test.pdf")

6. API 데이터 가져오기

urllib3를 사용하여 API 데이터를 자동으로 가져오며, 날씨 정보, 주가, GitHub 저장소 정보 등 어떤 데이터든 처리할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import urllib3

# GET 요청으로 API 데이터 가져오기
url = "https://api.github.com/users/psf/repos" # GitHub 저장소 API URL
http = urllib3.PoolManager() # HTTP 연결 풀 생성
response = http.request('GET', url) # GET 요청 전송
print("Status Code:", response.status) # 상태 코드 출력
print("Response Data:", response.data) # 응답 데이터 출력

# POST 요청으로 API 데이터 전송
url = "https://httpbin.org/post" # POST 테스트 API URL
http = urllib3.PoolManager() # HTTP 연결 풀 생성
response = http.request('POST', url, fields={'hello': 'world'}) # POST 요청 전송
print("Status Code:", response.status) # 상태 코드 출력

7. 배터리 알림: 배터리 상태를 항상 주시하세요

plyerpsutil을 사용해 배터리 상태를 모니터링하고 충전이 필요할 때 알림을 보냅니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from plyer import notification
import psutil
from time import sleep

while True:
battery = psutil.sensors_battery()
life = battery.percent

if life < 50:
notification.notify(
title="Battery Low",
message="Please connect to a power source",
timeout=10
)
sleep(50)

8. 웹 스크래핑

BeautifulSouprequests를 사용해 웹사이트에서 데이터를 자동으로 추출합니다.

1
2
3
4
5
6
7
8
9
10
11
import requests
from bs4 import BeautifulSoup

url = "https://example.com" # 스크래핑할 URL
response = requests.get(url) # GET 요청

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

# 웹사이트에서 특정 데이터 추출
data = soup.find("div", {"class": "content"}).get_text() # "content" 클래스 데이터 추출
print(data)

9. Pytest: 자동화된 테스트로 오류 없는 코드 유지

Pytest를 사용해 Python 코드가 올바르게 작동하는지 자동으로 테스트할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pytest

# 테스트할 함수
def add_numbers(x, y):
return x + y

# 테스트 케이스
def test_addition():
assert add_numbers(1, 2) == 3
assert add_numbers(-1, 1) == 0
assert add_numbers(0, 0) == 0
assert add_numbers(10, 5) == 15

if __name__ == "__main__":
pytest.main()

10. 파일 백업 및 동기화

파일을 자동으로 백업하고 동기화하여 데이터를 안전하게 관리할 수 있습니다. 이 스크립트는 두 폴더 간 파일 백업 및 동기화를 수행합니다. 한 폴더에서 문서를 수정하면 다른 폴더도 자동으로 업데이트됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import os
import shutil

def backup_and_sync(source_folder, backup_folder):
for root, _, files in os.walk(source_folder):
for file in files:
source_path = os.path.join(root, file)
backup_path = os.path.join(backup_folder, root.replace(source_folder, ""), file)

# 백업 폴더에 디렉토리가 없으면 생성
os.makedirs(os.path.dirname(backup_path), exist_ok=True)

# 백업 폴더로 파일 복사
shutil.copy2(source_path, backup_path)

# 백업 폴더에 남아있는 불필요한 파일 삭제
for root, _, files in os.walk(backup_folder):
for file in files:
backup_path = os.path.join(root, file)
source_path = os.path.join(source_folder, root.replace(backup_folder, ""), file)

if not os.path.exists(source_path):
os.remove(backup_path)

source_folder = "path/to/source/folder" # 원본 폴더 경로
backup_folder = "path/to/backup/folder" # 백업 폴더 경로

backup_and_sync(source_folder, backup_folder)
Share