Оригинал: 20 Python Scripts To Automate Your Daily Tasks

Перевод для канала Мы ж программист

Полагаю, вы уже какое-то время кодите на Python и считаете, что неплохо в этом разбираетесь. Или вы все еще просто плывете в бесконечном потоке страниц StackOverflow. В любом случае могу поспорить, что вы жаждете скриптов, которые сделают вас похожим на волшебника кодинга.

У меня есть 20 скриптов на Python, которые произведут впечатление на ваших коллег, позволят автоматизировать то, что невозможно автоматизировать, и решить проблемы, о которых вы даже не подозревали.

Поехали!

1. Поиск дубликатов файлов (продляем жизнь жесткому диску)

Вы когда-нибудь смотрели на свой жесткий диск и задавались вопросом: «Почему у меня осталось всего 100 МБ? Дубликаты файлов. Они коварны. Вот скрипт для их поиска и удаления:

Python
import os
import hashlib

def hash_file(filename):
    h = hashlib.md5()
    with open(filename, 'rb') as file:
        while chunk := file.read(8192):
            h.update(chunk)
    return h.hexdigest()

def find_duplicates(folder):
    hashes = {}
    for dirpath, _, filenames in os.walk(folder):
        for f in filenames:
            full_path = os.path.join(dirpath, f)
            file_hash = hash_file(full_path)
            if file_hash in hashes:
                print(f"Duplicate found: {full_path} == {hashes[file_hash]}")
            else:
                hashes[file_hash] = full_path

find_duplicates('/path/to/your/folder')

Совет профессионала: Не запускайте его вслепую в системной папке, если не хотите внести хаос.

2. Авто-упорядочивание папки «Загрузки» (потому что, честно говоря, в ней хаос)

Всем нам знакомо это чувство: в один прекрасный день ваша папка «Загрузки» выглядит как последствия торнадо. Вот скрипт, который упорядочивает все аккуратно:

Python
import os
import shutil

def organize_folder(folder):
    file_types = {
        'Images': ['.jpeg', '.jpg', '.png', '.gif'],
        'Videos': ['.mp4', '.avi', '.mov'],
        'Documents': ['.pdf', '.docx', '.txt'],
        'Archives': ['.zip', '.rar']
    }

    for filename in os.listdir(folder):
        file_path = os.path.join(folder, filename)
        if os.path.isfile(file_path):
            ext = os.path.splitext(filename)[1].lower()
            for folder_name, extensions in file_types.items():
                if ext in extensions:
                    target_folder = os.path.join(folder, folder_name)
                    os.makedirs(target_folder, exist_ok=True)
                    shutil.move(file_path, os.path.join(target_folder, filename))
                    print(f'Moved {filename} to {folder_name}')

organize_folder('/path/to/Downloads')

Потому что ни у кого нет времени организовывать файлы вручную.

3. Пакетный ресайз изображений (готовим к Instagram за секунды)

Работаете над проектом, в котором требуется изменить размер изображения? Вот как можно без особых усилий пакетно изменить размер изображений:

Python
from PIL import Image
import os

def batch_resize(folder, width, height):
    for filename in os.listdir(folder):
        if filename.endswith(('.jpeg', '.jpg', '.png')):
            img = Image.open(os.path.join(folder, filename))
            img = img.resize((width, height))
            img.save(os.path.join(folder, f"resized_{filename}"))
            print(f'Resized {filename}')

batch_resize('/path/to/images', 800, 600)

Идеально подходит для случаев, когда ваш босс хочет, чтобы «эти изображения были обрезаны и изменены в размере за… 5 минут».

4. Уведомление о погоде в реальном времени (никогда больше не попадете под дождь)

Получайте обновления погоды в режиме реального времени каждый час и больше никогда не забывайте свой зонтик:

Python
import requests
import time

API_KEY = 'your_api_key'
CITY = 'New York'

def get_weather():
    url = f"http://api.openweathermap.org/data/2.5/weather?q={CITY}&appid={API_KEY}"
    response = requests.get(url)
    data = response.json()
    return data['weather'][0]['description'], data['main']['temp'] - 273.15

while True:
    weather, temp = get_weather()
    print(f"Current weather in {CITY}: {weather}, {temp:.2f}°C")
    time.sleep(3600)  # Run every hour

Потому что кому это надо – проверять погоду вручную в приложении?

5. Отправка на email последних сообщений Reddit на любимую тему (мечта Reddit-зависимых)

Если вы одержимы определенным сабреддитом, но не хотите постоянно проверять его, вот скрипт на Python, который отправляет последние сообщения прямо в ваш почтовый ящик:

Python
import smtplib
import requests

def send_email(subject, body):
    from_addr = 'your_email@example.com'
    to_addr = 'your_email@example.com'
    msg = f"Subject: {subject}\n\n{body}"
    with smtplib.SMTP('smtp.gmail.com', 587) as server:
        server.starttls()
        server.login('your_email@example.com', 'your_password')
        server.sendmail(from_addr, to_addr, msg)

def get_reddit_posts(subreddit):
    url = f"https://www.reddit.com/r/{subreddit}/new.json"
    headers = {'User-agent': 'Mozilla/5.0'}
    response = requests.get(url, headers=headers)
    data = response.json()
    return [post['data']['title'] for post in data['data']['children']]

posts = get_reddit_posts('python')
send_email('Latest Reddit Posts', '\n'.join(posts))

Забавный факт: средний redditor тратит на посещение сайта 16 минут за визит. Автоматизация этого процесса сэкономит массу времени.

6. Превращаем веб-страницу в электронную книгу (потому что нам всем нужен оффлайн доступ)

Этот скрипт берет вашу любимую статью и превращает ее в формат электронной книги, идеально подходящий для автономного чтения:

Python
import requests
from bs4 import BeautifulSoup
from ebooklib import epub

def create_ebook(url, book_title):
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')
    
    book = epub.EpubBook()
    book.set_title(book_title)
    
    chapter = epub.EpubHtml(title='Chapter 1', file_name='chap_01.xhtml')
    chapter.content = soup.prettify()
    book.add_item(chapter)
    
    book.spine = ['nav', chapter]
    epub.write_epub(f'{book_title}.epub', book, {})

create_ebook('https://example.com/your-favorite-article', 'My eBook')

Потому что иногда во время полета хочется прочитать потрясающий пост на Medium.

7. Преобразование текста в речь (режим диктора активирован)

Вам когда-нибудь хотелось не читать, а слушать вывод кода? Этот скрипт превращает текст в речь:

Python
import pyttsx3

def text_to_speech(text):
    engine = pyttsx3.init()
    engine.say(text)
    engine.runAndWait()

text_to_speech('Hello World, Python is amazing!')

Профессиональный совет: используйте это, чтобы найти ошибки или просто отдохнуть от чтения.

8. Проверка доступности сайта (для веб-мастера)

Хотите узнать, не сломался ли ваш сайт? Вот простой скрипт, который проверит это за вас:

Python
import requests

def is_website_online(url):
    try:
        response = requests.get(url)
        return response.status_code == 200
    except:
        return False

print(is_website_online('https://example.com'))

Вы скажете мне спасибо, когда проснетесь и обнаружите, что ваш сайт не работает уже 4 часа.

9. Следим за ценами на криптовалюты (потому что HODL)

Не пропустите следующее падение или взлет. Отслеживайте цены на свои любимые криптовалюты с помощью этого скрипта:

Python
import requests

def get_crypto_price(crypto):
    url = f"https://api.coindesk.com/v1/bpi/currentprice/{crypto}.json"
    response = requests.get(url)
    data = response.json()
    return data['bpi']['USD']['rate']

print(get_crypto_price('BTC'))

Для случаев, когда вы хотите узнать, насколько вы богаты (или бедны) в режиме реального времени.

10. Выключаем компьютер после завершения загрузки (потому что ждать скучно)

Позвольте вашему компьютеру позаботиться о себе. Этот скрипт выключает компьютер после завершения загрузки:

Python
import os
import time

def check_downloads():
    while True:
        if not os.listdir('/path/to/downloads'):
            print("Shutting down...")
            os.system("shutdown /s /t 1")
        time.sleep(60)

check_downloads()

Теперь вы можете нажать кнопку «Загрузить», уйти и вернуться к выключенному компьютеру.

11. Защищаем паролем свои скрипты (храните свой код в безопасности)

Защитите паролем свои скрипты, чтобы никто не запускал их без разрешения:

Python
import getpass

password = getpass.getpass('Enter your password: ')
if password != 'secret':
    print('Access Denied')
    exit()
else:
    print('Access Granted')
    # Your protected code here     

Профессиональный совет: сочетайте это с методом шифрования для двойной защиты.

12. Мониторинг использования CPU (в буквальном смысле не горячитесь)

Следите за температурой и использованием процессора:

Python
import psutil

def monitor_cpu():
    print(f"CPU usage: {psutil.cpu_percent()}%")
    print(f"Memory usage: {psutil.virtual_memory().percent}%")

monitor_cpu()

Потому что перегрев – всегда невесело.

13. Конвертируем PDF в текст (для собственной библиотеки)

Если вы много работаете с PDF, этот скрипт достанет оттуда текст для вас:

Python
import PyPDF2

def pdf_to_text(pdf_file):
    reader = PyPDF2.PdfReader(pdf_file)
    text = ''
    for page in reader.pages:
        text += page.extract_text()
    return text

print(pdf_to_text('example.pdf'))

Теперь вы сможете легко выбрать важную информацию без бесконечного копипаста.

14. Генерируем QR-код (для того единственного раза, когда он понадобился)

Создаем QR-код для любого URL или текста:

Python
import qrcode

def generate_qr(text, filename):
    img = qrcode.make(text)
    img.save(f"{filename}.png")

generate_qr('https://example.com', 'my_qr_code')

Кто-то знал, что создание QR может быть таким легким?

15. Загружаем видео с YouTube (потому что реклама на YouTube разражает)

Загружайте ваши любимые видео за секунды:

Python
import yt_dlp

def download_video(url):
    # Options for yt-dlp
    ydl_opts = {
        'format': 'best',  # Download the best available quality
        'outtmpl': '%(title)s.%(ext)s',  # Set filename to video title
        'noplaylist': True,  # Download single video if URL is part of a playlist
        'quiet': False,  # Show download progress in the console
        'ignoreerrors': True,  # Continue even if an error is encountered
        'no_warnings': True,  # Suppress warnings
    }
    try:
        # Use yt-dlp to download the video
        with yt_dlp.YoutubeDL(ydl_opts) as ydl:
            ydl.download([url])
        print("Download completed successfully.")
    except Exception as e:
        print(f"An error occurred: {e}")

# Replace with the desired YouTube video URL
download_video('https://www.youtube.com/watch?v=_v7ksOgFn-w')

Помните, загружайте ответственно!

16. Создаем надежные пароли (потому что Password123 – это ужасно)

Генерируйте надежные и случайные пароли с помощью этого скрипта:

Python
import string
import random

def generate_password(length):
    chars = string.ascii_letters + string.digits + string.punctuation
    return ''.join(random.choice(chars) for _ in range(length))

print(generate_password(16))

Прекратите использовать слабые пароли. Просто прекратите.

17. Получаем биржевые курсы в реальном времени (для инвестора внутри вас)

Отслеживайте цены на акции в реальном времени с помощью этого быстрого скрипта:

Python
import requests

def get_stock_price(symbol):
    url = f"https://finnhub.io/api/v1/quote?symbol={symbol}&token=your_api_key"
    response = requests.get(url)
    data = response.json()
    return data['c']

print(get_stock_price('AAPL'))

Проверьте ваш портфель, даже не открывая браузер.

18. Создаем простого чат-бота (потому что почему бы и нет?)

Сделайте своего собственного бота:

Python
import random

def chatbot():
    responses = ['Hello!', 'How can I help you?', 'Goodbye!']
    while True:
        user_input = input("You: ")
        if user_input.lower() == 'bye':
            print("Chatbot: Goodbye!")
            break
        print(f"Chatbot: {random.choice(responses)}")

chatbot()

Ваш персональный ассистент, созданный в несколько строк кода.

19. Считаем пройденные шаги с помощью шагомера (оставайтесь в форме)

Есть фитнес-трекер? Посчитайте шаги с Python:

Python
import fitbit

def get_daily_steps(token):
    client = fitbit.Fitbit('client_id', 'client_secret', oauth2_token=token)
    steps = client.activities()['summary']['steps']
    return steps

print(f"Steps today: {get_daily_steps('your_token')}")

Кто сказал, что Python не может помочь вам сохранить здоровье?

20. Создаем список дел (потому что продуктивность – это главное)

Простой список дел, потому что всем нам нужен порядок в жизни:

Python
import json

def add_task(task):
    with open('todo.json', 'r+') as file:
        tasks = json.load(file)
        tasks.append(task)
        file.seek(0)
        json.dump(tasks, file)

add_task('Publish Medium article')

Быть в курсе всех событий – питонический подход.