Сборник рабочих скриптов на Python с подробными инструкциями

Раздел: Python -> Создание и выполнение скриптов

Готовые скрипты Python: от простого к сложному

Как написать универсальный скрипт для обработки CSV-файлов, чтобы он принимал аргументы командной строки и корректно обрабатывал ошибки?

Основой для многих задач является скрипт, который читает данные из CSV, фильтрует их по условию и сохраняет результат в новый файл. Ниже представлено наиболее эффективное решение, использующее модуль csv и библиотеку argparse.


import csv
import argparse

def process_csv(input_file, output_file, column, min_value):
    try:
        with open(input_file, 'r', encoding='utf-8') as infile:
            reader = csv.DictReader(infile)
            fieldnames = reader.fieldnames
            with open(output_file, 'w', encoding='utf-8', newline='') as outfile:
                writer = csv.DictWriter(outfile, fieldnames=fieldnames)
                writer.writeheader()
                for row in reader:
                    if row[column] and float(row[column]) >= min_value:
                        writer.writerow(row)
        print(f"Результат сохранен в {output_file}")
    except Exception as e:
        print(f"Ошибка: {e}")

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Фильтр CSV по числовому столбцу')
    parser.add_argument('input', help='Путь к входному CSV')
    parser.add_argument('output', help='Путь к выходному CSV')
    parser.add_argument('column', help='Имя столбца для фильтрации')
    parser.add_argument('min_value', type=float, help='Минимальное значение')
    args = parser.parse_args()
    process_csv(args.input, args.output, args.column, args.min_value)

как запустить скрипт python в windows (выполнение скриптов python)

Инструкция: сохраните скрипт как filter_csv.py и запустите командой:

python filter_csv.py data.csv result.csv age 18

Python готовый скрипт (примеры скриптов python)

Скрипт прочитает файл data.csv, оставит только строки, где столбец age больше или равен 18, и запишет результат в result.csv.

Типичные ошибки:

  • Ошибка кодировки: если CSV в другой кодировке (например, cp1251), укажите encoding='cp1251'.
  • Файл не найден: проверьте путь и текущую директорию.
  • Некорректные данные в столбце: используйте try-except внутри цикла для пропуска ошибочных строк.

Вариант 1. Как скачать все файлы с FTP-сервера в локальную папку одним скриптом?

Для автоматического получения данных с FTP удобно использовать модуль ftplib. Цель: рекурсивно скачать все файлы из удалённой директории.


import ftplib
import os

def download_ftp(host, username, password, remote_dir, local_dir):
    ftp = ftplib.FTP(host)
    ftp.login(username, password)
    ftp.cwd(remote_dir)
    if not os.path.exists(local_dir):
        os.makedirs(local_dir)
    filenames = ftp.nlst()
    for filename in filenames:
        local_path = os.path.join(local_dir, filename)
        with open(local_path, 'wb') as f:
            ftp.retrbinary(f'RETR {filename}', f.write)
        print(f'Скачан: {filename}')
    ftp.quit()

download_ftp('ftp.example.com', 'user', 'pass', '/pub', './local_folder')

Python папка скрипта (работа со скриптами python)

Сценарий использования: загрузка ежедневных отчётов с сервера. Проблемы: если сервер требует пассивный режим, добавьте ftp.set_pasv(True); если имя файла содержит нелатинские символы, потребуется кодировка.

Возможные ошибки: тайм-аут соединения - увеличьте таймаут через ftplib.FTP(timeout=30). Отсутствие прав доступа - проверьте логин/пароль.

Вариант 2. Как проверить орфографию в текстовом файле с помощью Python?

Используется библиотека pyspellchecker или enchant. Пример с pyspellchecker (установка: pip install pyspellchecker).


from spellchecker import SpellChecker

def check_spelling(file_path):
    spell = SpellChecker(language='ru')
    with open(file_path, 'r', encoding='utf-8') as f:
        text = f.read()
    words = text.split()
    misspelled = spell.unknown(words)
    print('Ошибки найдены в словах:', misspelled)
    for word in misspelled:
        suggestion = spell.correction(word)
        if suggestion:
            print(f"{word} -> {suggestion}")

check_spelling('text.txt')

Python 3 скрипты (создание скриптов на python)

Цель: быстрое выявление опечаток в документации или статьях. Проблемы: для русского языка нужна отдельная установка словаря (pip install pyspellchecker[ru]). Ложные срабатывания на технических терминах - добавьте их в исключения.

Вариант 3. Как отслеживать изменения в папке и автоматически архивировать новые файлы?

Модуль watchdog позволяет наблюдать за файловой системой. Пример: при добавлении нового файла в папку он упаковывается в ZIP.


import zipfile
import os
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class ArchiveHandler(FileSystemEventHandler):
    def on_created(self, event):
        if not event.is_directory:
            file_path = event.src_path
            zip_name = file_path + '.zip'
            with zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED) as zf:
                zf.write(file_path, os.path.basename(file_path))
            print(f'Архивирован: {file_path}')

if __name__ == '__main__':
    path = '.'
    event_handler = ArchiveHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=False)
    observer.start()
    try:
        while True:
            import time
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

Использование: автоматическое резервное копирование новых документов. Проблемы: рекурсивный мониторинг (параметр recursive=True) может замедлить систему при большом количестве папок; на Windows требуется административные права для наблюдения за сетевыми папками.

Расширенные примеры с нестандартными решениями

Как парсить веб-страницы с динамическим контентом и сохранять результат в структурированном JSON?

Ниже используется selenium для загрузки страницы и BeautifulSoup для извлечения данных. Скрипт собирает заголовки новостей со страницы, которая подгружается через JavaScript.

Пример

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
import json
import time

def scrape_dynamic_news(url):
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')  # фоновый режим
    driver = webdriver.Chrome(options=options)
    driver.get(url)
    try:
        WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, 'news-title'))
        )
    except:
        print('Элементы не загрузились')
        driver.quit()
        return
    html = driver.page_source
    soup = BeautifulSoup(html, 'html.parser')
    titles = soup.find_all('h2', class_='news-title')
    data = [t.get_text(strip=True) for t in titles]
    driver.quit()
    with open('news.json', 'w', encoding='utf-8') as f:
        json.dump(data, f, ensure_ascii=False, indent=2)
    print(f'Сохранено {len(data)} заголовков')

scrape_dynamic_news('https://example.com/news')

Результат (пример содержимого news.json):

[
  "Первая новость",
  "Вторая новость",
  "Третья новость"
]

Как реализовать многопоточное скачивание изображений из списка URL с отображением прогресса?

Используются модули concurrent.futures и requests. Пример загружает 50 изображений параллельно, что значительно ускоряет процесс.

Пример

import requests
import concurrent.futures
import os

def download_image(url, folder):
    try:
        response = requests.get(url, timeout=10)
        if response.status_code == 200:
            filename = os.path.join(folder, url.split('/')[-1])
            with open(filename, 'wb') as f:
                f.write(response.content)
            return f"Успешно: {filename}"
        else:
            return f"Ошибка HTTP: {url}"
    except Exception as e:
        return f"Исключение: {url} - {e}"

urls = [f'https://example.com/image{i}.jpg' for i in range(1, 51)]
folder = 'downloaded'
os.makedirs(folder, exist_ok=True)

with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
    future_to_url = {executor.submit(download_image, url, folder): url for url in urls}
    for future in concurrent.futures.as_completed(future_to_url):
        result = future.result()
        print(result)

Результат вывода (выборочно):

Успешно: downloaded/image1.jpg
Ошибка HTTP: https://example.com/image30.jpg
Успешно: downloaded/image2.jpg
...

Как создать телеграм-бота для получения погоды через API и отправки сообщения по расписанию?

Используются библиотеки python-telegram-bot и requests. Бот каждое утро отправляет текущую температуру в заданный чат.

Пример

import asyncio
from telegram import Bot
from telegram.ext import Application, CommandHandler, ContextTypes
import requests
import schedule

TOKEN = 'ваш_токен'
CHAT_ID = 'ваш_chat_id'
OPENWEATHER_API_KEY = 'ключ_погодного_api'

def get_weather(city='Moscow'):
    url = f'https://api.openweathermap.org/data/2.5/weather?q={city}&appid={OPENWEATHER_API_KEY}&units=metric'
    response = requests.get(url)
    if response.status_code == 200:
        data = response.json()
        temp = data['main']['temp']
        description = data['weather'][0]['description']
        return f'Сейчас в {city}: {temp}°C, {description}'
    return 'Не удалось получить погоду'

async def send_weather(bot):
    text = get_weather()
    await bot.send_message(chat_id=CHAT_ID, text=text)

async def start(update, context):
    await update.message.reply_text('Привет! Я буду присылать погоду каждое утро.')

async def main():
    application = Application.builder().token(TOKEN).build()
    application.add_handler(CommandHandler('start', start))
    # Пример с schedule (запускается отдельно в цикле)
    import time
    while True:
        schedule.run_pending()
        time.sleep(60)

if __name__ == '__main__':
    bot = Bot(token=TOKEN)
    schedule.every().day.at('08:00').do(lambda: asyncio.run(send_weather(bot)))
    asyncio.run(main())

Результат - бот ежедневно в 8:00 отправляет сообщение вида:

Сейчас в Moscow: 5.2°C, облачно с прояснениями

Как автоматически генерировать отчёт в формате HTML из данных БД SQLite с помощью Pandas?

С помощью pandas данные превращаются в красивую таблицу, а jinja2 формирует HTML.

Пример

import sqlite3
import pandas as pd
from jinja2 import Template

def generate_report(db_path, template_html):
    conn = sqlite3.connect(db_path)
    df = pd.read_sql_query("SELECT name, age, salary FROM employees WHERE salary > 50000", conn)
    conn.close()
    with open(template_html, 'r') as f:
        template = Template(f.read())
    html_out = template.render(table=df.to_html(classes='table table-striped', index=False))
    with open('report.html', 'w', encoding='utf-8') as f:
        f.write(html_out)
    print('Отчёт сгенерирован: report.html')

generate_report('employees.db', 'template.html')

Пример шаблона template.html:

Пример

<html><head><link rel="stylesheet" href="https://cdn.datatables.net/1.10.21/css/jquery.dataTables.min.css"></head><body>
<h2>Сотрудники с зарплатой выше 50 000</h2>
{{ table }}
</body></html>

Результат - файл report.html с полноценной таблицей, готовой к просмотру в браузере.

Примеры скриптов Python - comments

En
Python готовый скрипт (python)