Python для новичковСтроки, модули и файлыПоиск и форматирование строк

Поиск и форматирование строк

Уроки курсаПоиск и форматирование строк

Подсчёт вхождений и проверка границ строки: count(), startswith(), endswith()

Три метода в этом разделе делают разные вещи и возвращают разные типы: count() даёт число (int), а startswith() и endswith() — булево значение (bool). Разберём каждый по очереди.

count() — сколько раз встречается подстрока

count(sub) считает, сколько раз подстрока sub встречается в строке. Вхождения не перекрываются — это важно понять на примере:

print('абракадабра'.count('а'))   # 5
print('aaa'.count('aa'))          # 1
print('hello world'.count('o'))   # 2
print('python'.count('x'))        # 0

Почему 'aaa'.count('aa') равно 1, а не 2? Метод находит первое вхождение 'aa' на позиции 0, «съедает» эти два символа, и следующий поиск начинается с позиции 2, где остался только один 'a'. Второго вхождения уже нет. Это стандартное поведение: count() не ищет перекрывающиеся совпадения.

Если подстрока не найдена — возвращает 0, а не -1. Это отличает его от find().

startswith() и endswith() — проверка начала и конца

Оба метода возвращают True или False. startswith(prefix) проверяет, начинается ли строка с указанного префикса, endswith(suffix) — заканчивается ли заданным суффиксом.

filename = 'report_2024.csv'

print(filename.startswith('report'))   # True
print(filename.startswith('data'))     # False
print(filename.endswith('.csv'))       # True
print(filename.endswith('.xlsx'))      # False

Эти методы удобнее, чем срезы, потому что код сразу говорит, что именно проверяется. Сравните:

# Через срез — неочевидно
if filename[:6] == 'report':
    ...

# Через startswith — читается как условие
if filename.startswith('report'):
    ...

Типичное применение endswith() — проверка расширения файла или формата строки перед обработкой:

def process_file(name):
    if not name.endswith('.csv'):
        print('Ожидается CSV-файл')
        return
    print(f'Обрабатываем файл: {name}')

process_file('data.csv')    # Обрабатываем файл: data.csv
process_file('data.xlsx')   # Ожидается CSV-файл

Оба метода чувствительны к регистру: 'Python'.startswith('py') вернёт False, потому что 'P' и 'p' — разные символы. Если нужна проверка без учёта регистра, строку надо предварительно привести к нижнему регистру через lower().