Найти в Дзене
Креативный дизайн

Элегантная валидация путей к исполняемым файлам в Python: методы startswith() и endswith() на практике

У нас имеется путь к запускаемому файлу. Данный путь к файлу имеет начало на диске C:/ и заканчивается исполняемым файлом с расширением .exe. Расширение пусть вводит пользователь. Мы точно знаем, что путь к файлу должен заканчиваться на расширении .exe. И мы напишем код, который это будет проверять. Такие проверки у программистов производятся постоянно. А так же проверим имеет ли файл начало на диске C:/ Базовый код: Тот же код ниже для копирования и вставки в программу. Не забывайте про необходимый отступ пробелами в определённых местах в начале строки, так как код на сервере блога может отображаться некорректно. file_path = "C:/Program Files/MyApp/program.exe"
user_extension = input("Введите расширение файла (например .exe): ")
# Проверка начала пути
if file_path.startswith("C:/"):
print("Файл находится на диске C:/")
else:
print("Файл находится на другом диске")
# Проверка расширения файла
if file_path.endswith(user_extension):
print(f"Файл имеет корректное расширение
Оглавление

Метод startswith():

  • Проверяет, начинается ли строка с указанной подстроки;
  • Возвращает True если строка начинается с искомой подстроки;
  • Возвращает False если строка начинается с другого значения.

Метод endswith():

  • Проверяет, заканчивается ли строка указанной подстрокой;
  • Возвращает True если строка заканчивается искомой подстрокой;
  • Возвращает False если строка заканчивается другим значением.

Практическая задача:

У нас имеется путь к запускаемому файлу. Данный путь к файлу имеет начало на диске C:/ и заканчивается исполняемым файлом с расширением .exe. Расширение пусть вводит пользователь. Мы точно знаем, что путь к файлу должен заканчиваться на расширении .exe. И мы напишем код, который это будет проверять. Такие проверки у программистов производятся постоянно.

А так же проверим имеет ли файл начало на диске C:/

Практический пример работы с путями файлов

Базовый код:

Выше написано правильное написание кода
Выше написано правильное написание кода
Тот же код ниже для копирования и вставки в программу. Не забывайте про необходимый отступ пробелами в определённых местах в начале строки, так как код на сервере блога может отображаться некорректно.

file_path = "C:/Program Files/MyApp/program.exe"
user_extension = input("Введите расширение файла (например .exe): ")

# Проверка начала пути
if file_path.startswith("C:/"):
print("Файл находится на диске C:/")
else:
print("Файл находится на другом диске")

# Проверка расширения файла
if file_path.endswith(user_extension):
print(f"Файл имеет корректное расширение {user_extension}")
else:
print(f"Некорректное расширение файла")

Разбор кода:

  • Строка 1: Определяем переменную file_path с путем к файлу;
  • Строка 2: Получаем пользовательский ввод расширения через input();
  • Строки 4-7: Проверяем расположение файла на диске C:/ методом startswith()
  • Строки 9-12: Валидируем расширение файла методом endswith()

Результат работы кода:

Результат, если вводими .exe
Результат, если вводими .exe
Результат, если вводими .bat
Результат, если вводими .bat

Меняем в коде C:/ на D:/

-5

Получаем на выходе следующий результат:

Результат, если вводими .exe
Результат, если вводими .exe
Результат, если вводими .bat
Результат, если вводими .bat

Улучшенная версия кода:

Выше написано правильное написание кода
Выше написано правильное написание кода
Тот же код ниже для копирования и вставки в программу. Не забывайте про необходимый отступ пробелами в определённых местах в начале строки, так как код на сервере блога может отображаться некорректно.

from pathlib import Path
import os

def validate_executable(file_path: str, required_drive: str = "C:/", required_ext: str = ".exe") -> dict:
"""
Валидация пути к исполняемому файлу

Args:
file_path: путь к файлу
required_drive: требуемый диск
required_ext: требуемое расширение

Returns:
dict: результаты проверок
"""
results = {
"valid_drive": False,
"valid_extension": False,
"file_exists": False
}

# Нормализация пути
path = Path(file_path)
normalized_path = str(path).replace("\\", "/")

# Проверки
results["valid_drive"] = normalized_path.startswith(required_drive)
results["valid_extension"] = normalized_path.endswith(required_ext)
results["file_exists"] = path.exists()

return results

# Пример использования
if __name__ == "__main__":
file_path = "C:/Program Files/MyApp/program.exe"
user_ext = input("Введите расширение файла: ").lower()

validation_results = validate_executable(file_path, required_ext=user_ext)

for check, result in validation_results.items():
print(f"{check}: {'Пройдена' if result else 'Не пройдена'}")

Результат работы кода:

Результат, если вводими .exe
Результат, если вводими .exe
Результат, если вводими .bat
Результат, если вводими .bat

Рекомендации по улучшению:

  • Обработка ошибок;
  • Дополнительные проверки:
  1. Проверка прав доступа;
  2. Валидация формата пути;
  3. Проверка размера файла.
  • Логирование результатов;
  • Асинхронная версия;

Практическое применение:

  • Установка программного обеспечения;
  • Валидация загружаемых файлов;
  • Автоматизация тестирования;
  • Системное администрирование.

Заключение:

Методы startswith() и endswith() предоставляют мощный и элегантный способ валидации путей к файлам в Python. В сочетании с современными практиками программирования, такими как типизация, обработка исключений и модульное тестирование, они позволяют создавать надёжный и поддерживаемый код. Использование этих методов особенно важно при работе с исполняемыми файлами, где точность проверок критична для безопасности системы.

ПОЛЕЗНЫЕ РЕСУРСЫ:

---------------------------------------------------

Сообщество дизайнеров в VK

https://vk.com/grafantonkozlov

Телеграмм канал сообщества

https://t.me/grafantonkozlov

Архив эксклюзивного контента

https://boosty.to/antonkzv

Канал на Дзен

https://dzen.ru/grafantonkozlov

---------------------------------------------------

Бесплатный Хостинг и доменное имя

https://tilda.cc/?r=4159746

Мощная и надежная нейронная сеть Gerwin AI

https://t.me/GerwinPromoBot?start=referrer_3CKSERJX

GPTs — плагины и ассистенты для ChatGPT на русском языке

https://gptunnel.ru/?ref=Anton

---------------------------------------------------