Метод 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()
Результат работы кода:
Меняем в коде C:/ на D:/
Получаем на выходе следующий результат:
Улучшенная версия кода:
Тот же код ниже для копирования и вставки в программу. Не забывайте про необходимый отступ пробелами в определённых местах в начале строки, так как код на сервере блога может отображаться некорректно.
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 'Не пройдена'}")
Результат работы кода:
Рекомендации по улучшению:
- Обработка ошибок;
- Дополнительные проверки:
- Проверка прав доступа;
- Валидация формата пути;
- Проверка размера файла.
- Логирование результатов;
- Асинхронная версия;
Практическое применение:
- Установка программного обеспечения;
- Валидация загружаемых файлов;
- Автоматизация тестирования;
- Системное администрирование.
Заключение:
Методы 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
---------------------------------------------------