В этой статье мы рассмотрим несколько способов обрезки строк. Будем применять срезы, строковый метод rsplit()
, форматирование и метод shorten()
из модуля textwrap.
Содержание
- Обрезка строки с помощью срезов
- Добавление многоточия после обрезки
- Создание переиспользуемой функции
- Обрезка строки с помощью f-строк
- Обрезка строки с помощью str.rsplit()
- Обрезка строки с помощью textwrap.shorten()
- Обрезка строки с помощью str.format()
Обрезка строки с помощью срезов
Чтобы обрезать строку, можно применить синтаксис срезов, например result = my_str[:5]
. Этот срез возвращает первые пять символов строки.
my_str = 'bobbyhadz.com' result = my_str[:5] print(result) # 👉️ bobby
![Приведенный выше код и результаты его выполнения в редакторе.](https://pythonist.ru/wp-content/uploads/2024/06/truncate-string-in-python.webp)
Синтаксис среза строк следующий: my_str[start:stop:step]
.
Индекс start
является инклюзивным, а индекс stop
— эксклюзивным (символ под индексом start
войдет в итоговый срез, а под индексом stop
— нет).
Индексация в Python начинается с нуля, поэтому первый символ в строке имеет индекс 0, а последний — -1 или len(my_str) - 1
.
my_str = 'bobbyhadz.com' result = my_str[:5] print(result) # 👉️ bobby
В результате мы получили подстроку, содержащую первые пять символов исходной строки.
Добавление многоточия после обрезки
Предположим, вы хотите добавить к результирующей строке троеточие, чтобы показать, что она была обрезана. Но добавлять его нужно, только если строка сократилась по сравнению с исходной. Для этого можно использовать тернарный оператор.
my_str = 'bobbyhadz.com' result = my_str[:5] + '...' if len(my_str) > 5 else my_str print(result) # 👉️ bobby...
![Приведенный выше код и результаты его выполнения в редакторе.](https://pythonist.ru/wp-content/uploads/2024/06/truncate-string-with-an-ellipsis.webp)
Выражение слева от оператора if
(тут — троеточие) возвращается, если условие выполнено, в противном случае строка возвращается как есть.
Создание переиспользуемой функции
Если вам часто приходится обрезать строки, можно создать специальную функцию.
def truncate_string(string, length, suffix='...'): return string[:length] + suffix print(truncate_string('bobbyhadz.com', 3)) # bob... print(truncate_string('bobbyhadz.com', 5)) # bobby... print(truncate_string('bobbyhadz.com', 7)) # bobbyha...
![Приведенный выше код и результаты его выполнения в редакторе.](https://pythonist.ru/wp-content/uploads/2024/06/creating-reusable-function.webp)
Эта функция принимает в качестве параметров строку, желаемую длину и, по желанию, суффикс и усекает заданную строку до указанной длины.
Обрезка строки при форматировании
Обрезать строку, в том числе при соблюдении определенного условия, можно с помощью f-строк.
my_str = 'bobbyhadz.com' result = f'{my_str:.5}' print(result) # 👉️ bobby result = f'{my_str:.5}{"..." if len(my_str) > 5 else ""}' print(result) # 👉️ bobby...
![Приведенный выше код и результаты его выполнения в редакторе.](https://pythonist.ru/wp-content/uploads/2024/06/truncate-string-using-formatted-string-literal.webp)
Обязательно заключайте выражения в фигурные скобки — {expression}
:
var1 = 'bobby' var2 = 'hadz' result = f'{var1}{var2}' print(result) # 👉️ bobbyhadz
F-строки также позволяют нам использовать мини-язык спецификации формата в блоках выражений.
my_str = 'bobbyhadz.com' result = f'{my_str:.5}' print(result) # 👉️ bobby
Цифра после точки — это максимальный размер строки. В этом примере строка форматируется максимум до 5 символов.
Вы можете использовать тернарный оператор для добавления многоточия, если длина строки превышает размер фрагмента.
my_str = 'bobbyhadz.com' result = f'{my_str:.5}{"..." if len(my_str) > 5 else ""}' print(result) # 👉️ bobby...
Обрезка строки с помощью str.rsplit()
Если вам нужно удалить последнее слово из строки, воспользуйтесь методом str.rsplit()
.
my_str = 'bobby hadz com' new_str = my_str.rsplit(' ', 1)[0] print(new_str) # 👉️ 'bobby hadz'
![Приведенный выше код и результаты его выполнения в редакторе.](https://pythonist.ru/wp-content/uploads/2024/06/truncate-string-using-str-rsplit.webp)
Метод str.rsplit()
возвращает список слов в строке, используя переданный аргумент separator в качестве строки-разделителя.
my_str = 'bobby hadz com' print(my_str.rsplit(' ')) # 👉️ ['bobby', 'hadz', 'com'] print(my_str.rsplit(' ', 1)) # 👉️ ['bobby hadz', 'com']
Метод str.rsplit()
принимает 2 аргумента:
separator
— разделитель, по которому строка разбивается на подстроки. Если не указан, в качестве разделителя используется пробел.maxsplit
— максимальное количество разрезов. Деление строки начинается справа. Это опциональный аргумент.
Если вам нужно удалить из строки 2 последних слова, установите аргумент maxsplit
равным 2 и обратитесь к элементу списка с индексом 0.
my_str = 'bobby hadz com' # 👇️ Удалить последнее слово из строки result = my_str.rsplit(' ', 1)[0] print(result) # 👉️ bobby hadz # 👇️ Удалить 2 последних слова из строки result = my_str.rsplit(' ', 2)[0] print(result) # 👉️ bobby
Обрезка строки с помощью textwrap.shorten()
Чтобы обрезать строку, также можно воспользоваться методом shorten()
из модуля textwrap. Он принимает в качестве параметра строку, максимальную ширину строки и заполнитель.
import textwrap a_string = 'bobby hadz com one two three' new_string = textwrap.shorten(a_string, width=8, placeholder='') print(new_string) # 👉️ bobby new_string = textwrap.shorten(a_string, width=8, placeholder='...') print(new_string) # 👉️ bobby... new_string = textwrap.shorten(a_string, width=15, placeholder='...') print(new_string) # 👉️ bobby hadz...
Метод усекает заданный текст, чтобы он поместился в заданную ширину. Обратите внимание, что заполнитель включается в ширину строки.
import textwrap a_string = 'bobby hadz com one two three' new_string = textwrap.shorten(a_string, width=5, placeholder='...') print(new_string) # 👉️ ...
В этом примере суммарная длина первого слова и заполнителя превышает заданную ширину в пять символов, поэтому возвращается только заполнитель.
Метод textwrap.shorten()
:
- Сокращает пробельные символы (заменяет несколько последовательных пробелов одним пробелом).
- Возвращает строку с сокращенными пробелами, если она укладывается в указанную ширину.
- В противном случае из строки вырезается (с конца) достаточное количество слов, чтобы оставшиеся слова плюс заполнитель поместились в указанную ширину.
Обрезка строки с помощью str.format()
Для обрезки строки также можно использовать метод str.format()
.
a_string = 'bobby hadz com one two three' new_str = '{:.5}'.format(a_string) print(new_str) # 👉️ bobby new_str = '{:.7}'.format(a_string) print(new_str) # 👉️ bobby h new_str = '{:.3}'.format(a_string) print(new_str) # 👉️ bob
Цифра после точки используется для указания количества символов строки, которые нужно вывести.
Метод str.format()
выполняет операции форматирования строк.
first = 'bobby' last = 'hadz' result = "Name: {} {}".format(first, last) print(result) # 👉️ "Name: bobby hadz"
Строка, на которой вызывается метод, может содержать поля замены, указанные с помощью фигурных скобок {}
.
Если использовать еще и тернарный оператор, можно добавить условие обрезки строки.
a_string = 'bobby hadz com one two three' new_str = '{:.5}'.format(a_string) + "..." if len(a_string) > 5 else "" print(new_str) # 👉️ bobby...
Строка в примере содержит более 5 символов, поэтому выполняется оператор if
и в конце добавляется многоточие.
Перевод статьи «How to truncate a String in Python».