Перейти к основному содержимому

Простые приложения на Python

Разработчику Архитектору

Простые приложения на Python

Python — это язык программирования высокого уровня, который сочетает в себе простоту синтаксиса и мощные возможности для решения широкого спектра задач. Язык ориентирован на читаемость кода и продуктивность разработчика. Стандартная библиотека Python включает множество модулей для работы с файлами, сетью, данными и операционной системой, что позволяет создавать функциональные утилиты без подключения внешних зависимостей.


Как запускать примеры из главы

  1. Сохраните код раздела в файл .py (имя — в Как запустить).
  2. В терминале: cd в каталог с файлом.
  3. Запустите: python имя_файла.py (или python3, если так настроена система).
python имя_файла.py

Проверка: python --version (рекомендуется Python 3.10+).

python --version

Убедиться, что интерпретатор не только найден, но и выполняет код:

python -c "print('ok')"

В выводе должно быть ok (на части систем — python3 или py вместо python).


Генератор паролей

Это приложение демонстрирует работу со строками, списками символов и генерацией случайных значений. Модуль random предоставляет инструменты для выбора элементов из коллекций.


Как запустить

  • Файл: password.py
  • Команда: python password.py
python password.py
  • Нужно: stdlib (random, string).
  • Результат: запрос длины пароля, затем строка Сгенерированный пароль: ....

Код ITЗагрузка примера кода…

Разбор:

  • Модули: string содержит предопределенные константы с буквами алфавита и цифрами. random отвечает за выбор случайных элементов.
  • Конкатенация строк: Оператор + объединяет строки в единый источник символов.
  • Генератор списков (Comprehension): Выражение (random.choice(...) for _ in range(...)) создает последовательность случайных символов.
  • Метод join: Строка "".join(...) собирает элементы списка в итоговую строку без разделителей.

Сортировщик текстового файла

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


Как запустить

  • Файл: sort_file.py
  • Подготовка: input.txt
  • Команда: python sort_file.py
python sort_file.py
  • Результат: output_sorted.txt

Код ITЗагрузка примера кода…

Разбор:

  • Контекстный менеджер (with): Гарантирует автоматическое закрытие файлов после завершения блока кода, даже при возникновении ошибок.
  • Обработка кодировки: Параметр encoding='utf-8' обеспечивает корректную работу с русским языком.
  • Метод strip: Удаляет пробелы и символы перевода строки по краям каждой строки.
  • Функция sorted: Возвращает новый отсортированный список, не изменяя исходный.

Консольный калькулятор

Пример показывает базовый ввод данных пользователем, условную логику и обработку исключений при делении на ноль или неверном вводе.

Код ITЗагрузка примера кода…

Разбор:

  • Бесконечный цикл (while True): Позволяет программе работать до явной команды выхода.
  • Условная логика (if/elif/else): Выбирает нужную математическую операцию.
  • Обработка исключений (try/except): Перехватывает ошибки преобразования текста в число (ValueError).
  • Типизация: Функция float() преобразует строковый ввод в вещественное число.

Трекер задач в JSON

Этот пример демонстрирует сериализацию (преобразование объектов в строку) и десериализацию (восстановление объектов из строки), а также работу с форматом JSON.

Код ITЗагрузка примера кода…

Разбор:

  • Модуль json: Функция json.dump сохраняет объект в файл как строку JSON. Функция json.load читает файл и преобразует его обратно в словарь или список.
  • Параметр ensure_ascii=False: Сохраняет кириллицу в файле как есть, а не в виде экранированных последовательностей.
  • Структура данных: Задачи хранятся в списке словарей, где каждый словарь описывает одну задачу.
  • Проверка существования файла: Функция os.path.exists предотвращает ошибку чтения несуществующего файла.

Простой мессенджер

Клиент с графическим интерфейсом собран на Tkinter. Базовые виджеты, pack/grid и mainloop — в Первая программа на Tkinter и галерее примеров; здесь — связка GUI с сетью и потоками.

Клиент

Создайте файл client_gui.py:

Код ITЗагрузка примера кода…

Разбор:

  • Класс ChatClientGUI объединяет сеть и интерфейс: хранит сокет, состояние подключения и виджеты окна.
  • Метод setup_ui() собирает структуру GUI (верхняя панель, чат, поле ввода, кнопки, меню), а не смешивает это с сетевой логикой.
  • connect_to_server() выполняет handshake: подключается к серверу, отправляет ник и включает элементы ввода после успешного соединения.
  • Для фонового получения сообщений запускается отдельный поток threading.Thread(..., daemon=True), чтобы интерфейс не "замерзал".
  • receive_messages() постоянно читает сокет, различает системные и пользовательские сообщения, и отправляет их в add_message() для форматированного вывода.
  • Методы disconnect(), reconnect() и on_closing() аккуратно закрывают соединение и освобождают ресурсы, предотвращая зависшие сокеты.

Больше примеров окон, меню и диалогов без сетевой логики — Tkinter — окна и виджеты.


Сервер

Создайте файл server.py:

Код ITЗагрузка примера кода…

Разбор:

  • Класс ChatServer создаёт TCP-сервер и хранит активные подключения в списках clients и nicknames.
  • start() открывает порт, принимает новых клиентов и запускает отдельный поток handle_client для каждого соединения.
  • При подключении сервер запрашивает ник ("NICK"), сохраняет клиента и рассылает сообщение о входе через broadcast(...).
  • broadcast() централизует рассылку: одна функция отправляет сообщение всем участникам чата.
  • handle_client() в цикле принимает сообщения и публикует их в общий чат, а при обрыве соединения удаляет клиента.
  • remove_client() синхронно очищает структуры, закрывает сокет и уведомляет остальных пользователей о выходе участника.

Запуск

Сначала запустите сервер:

python server.py

Затем запустите два клиента:

python client_gui.py

В появившемся окне введите никнейм, и пользуйтесь чатом.


Простой HTTP-сервер и клиент

Python позволяет быстро развернуть веб-сервер и отправить запрос к нему, используя стандартные библиотеки.


Сервер

Код ITЗагрузка примера кода…


Клиент

Код ITЗагрузка примера кода…

Разбор:

  • BaseHTTPRequestHandler: Базовый класс для обработки HTTP-запросов. Метод do_GET реагирует на запросы типа GET.
  • send_response, send_header, end_headers: Последовательность методов для формирования заголовков ответа.
  • urllib.request: Библиотека для выполнения HTTP-запросов. Функция urlopen открывает соединение с URL.
  • Кодировка: Метод encode преобразует текст в байты для отправки, decode — для чтения.

Отправитель HTTP-запросов

Расширенный пример клиента с возможностью отправки данных методом POST.

Код ITЗагрузка примера кода…

Разбор:

  • urlencode: Преобразует словарь параметров в строку вида key1=value1&key2=value2.
  • Класс Request: Позволяет задать метод запроса (POST) и дополнительные заголовки.
  • Контекстный менеджер with: Автоматически закрывает соединение после получения ответа.

Утилита для сканирования директорий

Инструмент для обхода дерева папок и вывода информации о файлах.

Код ITЗагрузка примера кода…

Разбор:

  • Рекурсия: Функция вызывает сама себя для обработки вложенных подпапок.
  • os.listdir: Возвращает список имен файлов и папок в указанной директории.
  • os.path.join: Корректно формирует путь к файлу независимо от операционной системы.
  • os.path.isdir: Проверяет, является ли путь директорией.
  • os.path.getsize: Получает размер файла в байтах.

Скрипт для создания резервного копирования файлов

Автоматическое создание копии файлов с добавлением временной метки.

Код ITЗагрузка примера кода…

Разбор:

  • datetime: Генерирует уникальное имя папки на основе текущего времени.
  • shutil.copytree: Копирует всю директорию вместе со всеми вложенными файлами и поддиректориями.
  • os.makedirs: Создает целевую директорию, если она отсутствует.

Мониторинг дискового пространства

Использование модуля psutil (часто используется в таких задачах) или стандартных средств ОС для проверки свободного места. В данном примере показано использование встроенного модуля shutil для Unix/Linux и Windows.

Код ITЗагрузка примера кода…

Разбор:

  • shutil.disk_usage: Возвращает кортеж из общего размера, занятого и свободного пространства в байтах.
  • Битовые сдвиги (// 2**30): Перевод байтов в гигабайты.
  • Определение ОС: Проверка os.name позволяет выбрать правильный корневой путь для Windows или Linux.

Парсер URL и проверка доступности ресурса

Разбор структуры ссылки и проверка её работоспособности.

Код ITЗагрузка примера кода…

Разбор:

  • urlparse: Разбивает строку URL на составные части (схема, хост, путь, параметры).
  • timeout: Параметр ограничивает время ожидания ответа, чтобы скрипт не зависал.
  • Обработка URLError: Специфичная обработка ошибок сетевого взаимодействия.

Конвертер форматов дат

Преобразование строк с датами между различными форматами.

Код ITЗагрузка примера кода…

Разбор:

  • strptime: Преобразует строку в объект даты и времени согласно шаблону.
  • strftime: Преобразует объект даты и времени обратно в строку по шаблону.
  • Коды форматов: %Y (год), %m (месяц), %d (день), %A (полное название дня недели).

Утилита для просмотра запущенных процессов

Просмотр списка активных процессов и их идентификаторов.

Код ITЗагрузка примера кода…

Разбор:

  • subprocess.run: Выполняет внешнюю команду операционной системы.
  • capture_output=True: Перехватывает вывод команды вместо вывода в консоль.
  • text=True: Возвращает результат как строку, а не как байты.
  • platform.system: Определяет текущую операционную систему для выбора правильной команды.

Характерный пример для Python — Использование декораторов

Python отличается своей поддержкой метапрограммирования через декораторы. Декоратор позволяет обернуть функцию дополнительным поведением без изменения её кода. Это характерная черта языка, позволяющая писать чистый и выразительный код.

Код ITЗагрузка примера кода…

Разбор:

  • Высокоуровневые функции: Функция timer_decorator принимает другую функцию как аргумент.
  • Замыкания (Closure): Внутренняя функция wrapper запоминает контекст внешней функции.
  • *args и **kwargs: позволяют декоратору принимать любое количество позиционных и именованных аргументов и передавать их оригинальной функции. Подробнее — произвольное число аргументов.
  • Синтаксический сахар (@): Запись @timer_decorator над функцией является сокращением для вызова slow_function = timer_decorator(slow_function).

Основа по протоколу

Базовый разбор HTTP и HTTPS находится в отдельной статье — HTTP как основа веб-интеграций.