Метод lower() в Python: как перевести строку в нижний регистр

Чтобы перевести строку в нижний регистр в Python, вызовите метод lower(): он вернёт новую строку, а исходную оставит как есть.

Разбираем поиск без учёта регистра, обработку списков и словарей, отличие lower() от casefold(), русские и турецкие буквы и пять частых ошибок с выводом интерпретатора.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 3221 статья автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3875 экспертных мнений Подписаться на Телеграм-канал
Обложка: Метод lower() в Python: как перевести строку в нижний регистр

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

text = "Привет, Мир! Python 3.14"
small = text.lower()
print(small)
print(text)
привет, мир! python 3.14
Привет, Мир! Python 3.14

Ниже покажу, где lower() нужен в реальном коде, чем он отличается от casefold() и на каких ошибках новички теряют время. Остальные методы строк собраны в шпаргалке по методам строк в Python.

CheckroiCheckroiПодборка курсов по Python570 курсов • 53 школыСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Как работает метод lower()

Рой переводит строку в нижний регистр на Python

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

Копия появляется потому, что строки в Python неизменяемые. Ни один метод строки не правит её «на месте», каждый отдаёт новый объект. Так устроены и replace(), и strip(), и все остальные.

Что было в строке Что сделает lower() Пример
Заглавные латинские буквы переведёт в строчные "PYTHON" → "python"
Заглавные русские буквы, включая Ё и Й переведёт в строчные "ЁЛКА" → "ёлка"
Цифры, пробелы, знаки препинания оставит без изменений "3.14!" → "3.14!"
Буквы, уже строчные оставит без изменений "мир" → "мир"

Пошагово: как перевести строку в нижний регистр

Возьмём частую задачу. Программа спрашивает «Продолжить?», а человек может ответить «да», «Да», «ДА» или «да» с пробелом в конце. Сравнивать каждый вариант отдельно неудобно, поэтому ответ сначала приводят к одному виду.

  1. Получите строку, например через input().
  2. Уберите пробелы по краям методом strip().
  3. Вызовите lower() на результате.
  4. Сравните с образцом, записанным строчными буквами.
answer = input("Продолжить? (да/нет): ")
if answer.strip().lower() == "да":
    print("Продолжаем")
else:
    print("Остановились")

Я запустил этот код и ввёл « ДА » с пробелами по краям:

Продолжить? (да/нет):   ДА
Продолжаем

Методы в цепочке выполняются слева направо: сначала strip() отдаёт строку без пробелов, потом lower() переводит её в строчные. Порядок здесь не важен, но читать цепочку проще, когда очистка стоит первой. Как устроена сама проверка, подробно разобрано в статье про операторы Python.

Канал основателя Checkroi Вани Буявца3 800 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

Где lower() нужен на практике

Почти всегда lower() вызывают перед сравнением. Компьютер считает «Python» и «python» разными строками, а человеку разница обычно не важна.

Поиск подстроки без учёта регистра

Оператор in ищет точное совпадение, поэтому запрос «PYTHON» в названии «Курс Python для начинающих» он не найдёт. Если перевести в нижний регистр обе стороны, поиск сработает.

title="Курс Python для начинающих"
query = "PYTHON"
print(query in title)
print(query.lower() in title.lower())
False
True

Нижний регистр для всего списка

У списка метода lower() нет, его вызывают у каждого элемента. Удобнее всего это делать генератором списка или функцией map(). Заодно легко убрать дубли, которые отличались только регистром.

tags = ["Python", "SQL", "Excel", "python", "EXCEL"]
small_tags = [tag.lower() for tag in tags]
print(small_tags)
print(sorted(set(small_tags)))
print(list(map(str.lower, tags)))
['python', 'sql', 'excel', 'python', 'excel']
['excel', 'python', 'sql']
['python', 'sql', 'excel', 'python', 'excel']

Если исходные данные пришли одной строкой через запятую, сначала разбейте её на части. Как это сделать, показано в инструкции про перевод строки в список.

Подсчёт слов в тексте

Без lower() слова «Кот», «КОТ» и «кот» попадут в подсчёт тремя разными словами. С ним счётчик сложит их в одно:

from collections import Counter

text = "Кот видит кота. КОТ спит, а кот ест."
words = [w.strip(".,!?") for w in text.lower().split()]
print(Counter(words).most_common(2))
[('кот', 3), ('видит', 1)]

Слово «кота» счётчик посчитал отдельно: lower() меняет регистр, но падежи не склеивает. Для подсчёта одного символа или слова хватит встроенного метода, о нём отдельная статья про count() в Python.

Очистка адреса почты

Люди вводят почту как придётся: с пробелом, с заглавными буквами. Перед сохранением в базу её обычно нормализуют, чтобы «Ivan.Petrov@Mail.RU» и «ivan.petrov@mail.ru» не стали двумя разными пользователями.

email = "  Ivan.Petrov@Mail.RU "
clean = email.strip().lower()
print(clean)
ivan.petrov@mail.ru

Есть тонкость. По стандарту RFC 5321 регистр в домене после «@» значения не имеет, а часть до «@» почтовый сервер обязан считать чувствительной к регистру: на некоторых серверах smith и Smith считаются разными ящиками. Сам стандарт пользоваться этим не советует. Поэтому во многих системах адрес хранят как ввёл человек, а нижний регистр применяют только при поиске и сравнении.

Ключи словаря в нижнем регистре

Когда ключи словаря собирают из разных источников, «Python» и «python» легко оказываются двумя ключами. Значения при этом делятся между ними, и итог по каждому выходит неверным. Если приводить ключ к нижнему регистру перед записью, значения сложатся в один ключ:

prices = {"Python": 5, "SQL": 3, "python": 2}
merged = {}
for key, value in prices.items():
    small = key.lower()
    merged[small] = merged.get(small, 0) + value
print(merged)
{'python': 7, 'sql': 3}

Как перевести в нижний регистр только часть строки

Метод lower() всегда обрабатывает строку целиком. Аргумента «только первые три буквы» у него нет. Если нужна часть, вырежьте её срезом, переведите и склейте с остатком.

word = "Python"
print(word[:1].lower() + word[1:])
phrase = "КУРСЫ по Python"
print(phrase[:5].lower() + phrase[5:])
python
курсы по Python

Запись word[:1] берёт первый символ, а word[1:] всё остальное. Срез [:1] удобнее индекса [0]: на пустой строке он вернёт пустую строку, а индекс упадёт с ошибкой IndexError. Как устроены срезы, подробно разобрано в статье про срезы в Python.

lower(), casefold() и другие методы регистра

Большие кубики с буквами превращаются в маленькие

У строки есть ещё несколько методов, которые работают с регистром. Их часто путают, поэтому прогнал все на одной фразе «Hello World»:

Метод Что делает Результат для «Hello World»
lower() все буквы строчные hello world
upper() все буквы заглавные HELLO WORLD
capitalize() первая буква строки заглавная, остальные строчные Hello world
title() каждое слово с заглавной Hello World
swapcase() меняет регистр каждой буквы на противоположный hELLO wORLD
casefold() убирает различия регистра для сравнения hello world

Проверить, что строка уже в нижнем регистре, можно методом islower(). Он возвращает True, если в строке есть хотя бы одна буква и все буквы строчные.

Чем casefold() отличается от lower()

Для русского и английского текста оба метода дают одинаковый результат. Разница появляется на редких символах. Пример из документации casefold(): немецкая «ß» уже строчная, поэтому lower() её не трогает, а casefold() заменяет на «ss».

print("straße".lower())
print("straße".casefold())
print("STRASSE".lower() == "straße".lower())
print("STRASSE".casefold() == "straße".casefold())
straße
strasse
False
True

Правило я вывел такое: lower() для вывода и хранения, casefold() для сравнения, если в данных может встретиться что-то кроме кириллицы и латиницы. Метод casefold() есть в Python начиная с версии 3.3.

Русские буквы и другие алфавиты

Python 3 хранит строки в Unicode, поэтому lower() одинаково переводит в строчные латиницу, кириллицу и греческий. Буквы Ё и Й переходят в ё и й без потерь.

print("ЁЛКА И ЙОД".lower())
print("ΟΔΟΣ".lower())
print("İstanbul".lower())
print(len("İ"), len("İ".lower()))
ёлка и йод
οδος
i̇stanbul
1 2

В греческом слове последняя сигма стала конечной «ς», как и требует правописание. По документации Python, lower() переводит буквы по разделу 3.13.2 «Default Case Conversion» стандарта Unicode.

С турецкой «İ» (заглавная I с точкой) вышло иначе: после lower() получилось два символа, обычная «i» и отдельная точка сверху. Поэтому длина строки выросла с 1 до 2. Правил отдельных языков lower() не учитывает, поэтому для турецкого и азербайджанского текста результат выходит не тот, которого ждёт носитель.

Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 800 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

Частые ошибки и что с ними делать

Рой радуется, что исправленный код заработал

Ниже пять ошибок, которые я встречаю в коде новичков чаще остальных. Каждую прогнал в Python 3.14, вывод скопирован из терминала.

Вызвали lower() и не сохранили результат

Строка не изменилась, хотя метод вызван. Причина в неизменяемости: результат lower() создаётся и сразу пропадает.

name = "Анна"
name.lower()
print(name)
name = name.lower()
print(name)
Анна
анна

Решение: присвойте результат переменной, той же или новой.

Забыли скобки

Запись word.lower без скобок не вызывает метод, а отдаёт сам метод как объект. Ошибки не будет, но сравнение молча вернёт False.

word = "Да"
print(word.lower == "да")
print(word.lower() == "да")
False
True

Вызвали lower() у числа или None

Метод есть только у строк. У числа Python выдаст AttributeError: 'int' object has no attribute 'lower', у пустого значения AttributeError: 'NoneType' object has no attribute 'lower'. Чаще всего это случается, когда данные пришли из файла или формы и в поле оказалось пусто.

Решение: проверьте значение перед вызовом или подставьте пустую строку: (value or "").lower(). Вариант str(value).lower() опасен: для None он вернёт строку «none», и она попадёт в данные как обычное слово.

Вызвали lower() у списка

Ошибка AttributeError: 'list' object has no attribute 'lower' значит, что метод вызвали у списка целиком. Переведите элементы по одному через генератор списка, как в примере с тегами выше.

Ждали True от islower() для строки без букв

Строка из одних цифр не считается строкой в нижнем регистре, потому что в ней нет букв.

print("123".islower())
print("abc123".islower())
False
True

Если нужно проверить «в строке нет заглавных», сравнивайте её с собственной копией: s == s.lower(). Для «123» такое сравнение вернёт True.

Где освоить Python системно

Методы строк обычно проходят в первые две недели любого курса по Python. Дальше идут функции, работа с файлами и библиотеки, а там уже нужна практика с проверкой кода. В каталоге Checkroi курсы Python можно сравнить по цене, длительности и отзывам учеников. Пять программ оттуда:

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Профессия «Python-разработчик»
Перейти на сайт курса
SkillboxSkillbox157 335 ₽5987 ₽/мес.10 месяцевОбзор курса
Fullstack-разработчик на Python
Перейти на сайт курса
НетологияНетология137 000 ₽7125 ₽/мес.21 месяцОбзор курса
ДО Профессия Python-разработчик
Перейти на сайт курса
GeekBrainsGeekBrains149 001 ₽3167 ₽/мес.10 месяцевОбзор курса
Автоматизированное тестирование на Python
Перейти на сайт курса
SkillboxSkillbox118 754 ₽4108 ₽/мес.9 месяцевОбзор курса
Профессия Python-разработчик
Перейти на сайт курса
SkillFactorySkillFactory140 040 ₽3890 ₽/мес.10 месяцевОбзор курса

Больше программ — в полном каталоге курсов по Python

Часто задаваемые вопросы

Что делает метод lower() в Python?

Возвращает копию строки, в которой все буквы строчные. Цифры, пробелы и знаки препинания не меняются, а исходная строка остаётся прежней.

Почему lower() не меняет мою строку?

Строки в Python неизменяемые, поэтому lower() создаёт новую строку. Сохраните результат в переменную: name = name.lower().

Чем lower() отличается от casefold()?

Для русского и английского текста результат одинаковый. casefold() дополнительно заменяет символы вроде немецкой «ß» на «ss», поэтому «STRASSE» и «straße» через casefold() совпадают, а через lower() нет.

Как перевести строку в верхний регистр?

Методом upper(): "Hello World".upper() вернёт "HELLO WORLD". Он тоже возвращает новую строку.

Как проверить, что строка в нижнем регистре?

Метод islower() вернёт True, если в строке есть хотя бы одна буква и все буквы строчные. Для строки из цифр он даст False, поэтому проверку «нет заглавных» удобнее писать как s == s.lower().

Работает ли lower() с русскими буквами?

Да. Python 3 хранит строки в Unicode, и lower() переводит кириллицу так же, как латиницу: «ЁЛКА» станет «ёлка».

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!