Endswith: примеры (PYTHON)
endswith(suffix[, start[, end]]): boolОписание функции endswith в Python
Метод endswith() для строковых объектов в Python применяется для проверки завершения строки заданным суффиксом. Его основное назначение - валидация окончаний строк, что часто требуется при обработке файловых путей, URL-адресов, расширений файлов или проверке форматов данных.
Синтаксис метода: str.endswith(suffix[, start[, end]])
Аргументы функции:
- suffix - обязательный аргумент, представляющий суффикс для проверки. Может быть строкой или кортежем строк. Если передан кортеж, функция вернет
True, если строка заканчивается любым из элементов кортежа. - start - необязательный аргумент, определяющий начальный индекс среза строки для проверки. По умолчанию равен 0.
- end - необязательный аргумент, определяющий конечный индекс среза строки для проверки. По умолчанию равен длине строки.
Возвращаемое значение: функция возвращает булево значение True, если строка заканчивается указанным суффиксом, или False в противном случае. При работе со срезом проверка применяется только к указанной части строки.
Базовые примеры использования
Простейший вариант проверки расширения файла:
filename = 'document.pdf'
result = filename.endswith('.pdf')
print(result)True
Проверка с использованием кортежа суффиксов:
image_file = 'photo.jpg'
result = image_file.endswith(('.jpg', '.png', '.gif'))
print(result)True
Использование параметров start и end:
text = 'Hello, world!'
result = text.endswith('world!', 7)
print(result)True
Проверка с указанием обоих параметров среза:
text = 'Python programming'
result = text.endswith('prog', 0, 11)
print(result)True
Пример возврата False:
filename = 'data.txt'
result = filename.endswith('.csv')
print(result)False
Альтернативные методы в Python
Для проверки окончаний строк в Python также доступны несколько альтернативных подходов:
- str.startswith() - проверяет начало строки, имеет аналогичные параметры
- Оператор in -
suffix in string[-len(suffix):]работает аналогично, но менее читаем - Регулярные выражения (re модуль) - предоставляют более сложные паттерны, но избыточны для простых проверок
- Сравнение срезов -
string[-len(suffix):] == suffixдает тот же результат
Метод endswith() предпочтительнее при проверке нескольких суффиксов благодаря поддержке кортежей. Регулярные выражения целесообразны при сложных условиях, а сравнение срезов подходит для единичных проверок.
Распространенные ошибки
Передача нестрокового аргумента в параметр suffix:
text = 'example'
try:
result = text.endswith(123)
except TypeError as e:
print(f'Ошибка: {e}')Ошибка: endswith first arg must be str or a tuple of str, not int
Некорректное использование отрицательных индексов в параметрах start/end:
text = 'Python'
result = text.endswith('th', -3, -1)
print(result)True
Пустой суффикс всегда возвращает True:
text = 'anything'
result = text.endswith('')
print(result)True
Использование неправильного типа данных в кортеже:
text = 'file.txt'
try:
result = text.endswith(('.txt', 123))
except TypeError as e:
print(f'Ошибка: {e}')Ошибка: endswith first arg must be str or a tuple of str, not int
История изменений
В Python 3.2 была добавлена поддержка кортежей в параметре suffix. Ранее метод принимал только строковые значения. Это изменение значительно расширило функциональность метода, позволив проверять несколько суффиксов за один вызов.
Другие значимые изменения:
- Python 2.5: добавлены параметры start и end
- Python 3.0: метод стал более строгим к типам данных
- Python 3.9: улучшена производительность для длинных строк
Современные версии Python поддерживают все указанные возможности без изменений в последних минорных релизах.
Расширенные примеры применения
Фильтрация списка файлов по расширениям:
files = ['doc.pdf', 'image.jpg', 'data.csv', 'script.py', 'notes.txt']
pdf_files = [f for f in files if f.endswith('.pdf')]
print(pdf_files)['doc.pdf']
Проверка доменов верхнего уровня:
domains = ['example.com', 'test.org', 'sample.net', 'invalid']
com_domains = [d for d in domains if d.endswith('.com')]
print(com_domains)['example.com']Валидация расширений изображений с кортежем:
Пример pythondef is_image(filename): return filename.endswith(('.jpg', '.jpeg', '.png', '.gif', '.bmp')) print(is_image('photo.jpg')) print(is_image('document.pdf'))True FalseПроверка окончаний с использованием переменных:
Пример pythonbase_url = 'https://api.example.com/v1/data' version = '/v1' result = base_url.endswith(version) print(result)FalseИспользование в условных выражениях:
Пример pythonemail = 'user@company.com' if email.endswith(('.com', '.net', '.org')): print('Коммерческий домен') else: print('Другой тип домена')Коммерческий доменПроверка нескольких условий:
Пример pythonfilename = 'archive.tar.gz' is_compressed = filename.endswith(('.gz', '.zip', '.rar')) is_archive = filename.endswith(('.tar', '.tar.gz', '.tar.bz2')) print(f'Сжатый: {is_compressed}, Архив: {is_archive}')Сжатый: True, Архив: TrueРабота с путями файловой системы:
Пример pythonimport os path = '/home/user/docs/report.pdf' is_pdf = path.endswith('.pdf') is_in_docs = path.endswith('/docs/report.pdf') print(f'PDF: {is_pdf}, В docs: {is_in_docs}')PDF: True, В docs: True
Реализации в других языках программирования
Аналоги функции существуют в большинстве популярных языков:
JavaScript:
let str = 'example.js';
console.log(str.endsWith('.js'));true
PHP (8.0+):
$str = 'document.pdf';
var_dump(str_ends_with($str, '.pdf'));bool(true)
Java:
String str = 'data.csv';
boolean result = str.endsWith('.csv');
System.out.println(result);true
C#:
string str = 'image.png';
bool result = str.EndsWith('.png');
Console.WriteLine(result);True
Go:
package main
import (
'fmt'
'strings'
)
func main() {
str := 'file.go'
result := strings.HasSuffix(str, '.go')
fmt.Println(result)
}true
Основное отличие Python - поддержка кортежа суффиксов и параметров среза, что отсутствует в некоторых других реализациях.