Endswith: примеры (PYTHON)

Функция 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 поддерживают все указанные возможности без изменений в последних минорных релизах.

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

Фильтрация списка файлов по расширениям:

Пример 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']

Проверка доменов верхнего уровня:

Пример python
domains = ['example.com', 'test.org', 'sample.net', 'invalid']
com_domains = [d for d in domains if d.endswith('.com')]
print(com_domains)
['example.com']

Валидация расширений изображений с кортежем:

Пример python
def is_image(filename):
    return filename.endswith(('.jpg', '.jpeg', '.png', '.gif', '.bmp'))

print(is_image('photo.jpg'))
print(is_image('document.pdf'))
True
False

Проверка окончаний с использованием переменных:

Пример python
base_url = 'https://api.example.com/v1/data'
version = '/v1'
result = base_url.endswith(version)
print(result)
False

Использование в условных выражениях:

Пример python
email = 'user@company.com'
if email.endswith(('.com', '.net', '.org')):
    print('Коммерческий домен')
else:
    print('Другой тип домена')
Коммерческий домен

Проверка нескольких условий:

Пример python
filename = '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

Работа с путями файловой системы:

Пример python
import 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 - поддержка кортежа суффиксов и параметров среза, что отсутствует в некоторых других реализациях.

питон endswith function comments

En
Endswith Check if string ends with suffix