Строки. Функции и методы строк

Итак, о работе со строками мы немного поговорили, теперь поговорим о функциях и методах строк.
Я постарался собрать здесь все строковые методы и функции, но если я что-то забыл — поправляйте.
Базовые операции
- Конкатенация (сложение)
При вызове методов необходимо помнить, что строки в Python относятся к категории неизменяемых последовательностей, то есть все функции и методы могут лишь создавать новую строку.
: Поэтому все строковые методы возвращают новую строку, которую потом следует присвоить переменной.
Таблица «Функции и методы строк»
| Функция или метод | Назначение |
|---|---|
| S = ‘str’; S = «str»; S = »’str»’; S = «»»str»»» | Литералы строк |
| S = «s\np\ta\nbbb» | Экранированные последовательности |
| S = r»C:\temp\new» | Неформатированные строки (подавляют экранирование) |
| S = b»byte» | Строка байтов |
| S1 + S2 | Конкатенация (сложение строк) |
| S1 * 3 | Повторение строки |
| S[i] | Обращение по индексу |
| S[i:j:step] | Извлечение среза |
| len(S) | Длина строки |
| S.find(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер первого вхождения или -1 |
| S.rfind(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер последнего вхождения или -1 |
| S.index(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер первого вхождения или вызывает ValueError |
| S.rindex(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер последнего вхождения или вызывает ValueError |
| S.replace(шаблон, замена[, maxcount]) | Замена шаблона на замену. maxcount ограничивает количество замен |
| S.split(символ) | Разбиение строки по разделителю |
| S.isdigit() | Состоит ли строка из цифр |
| S.isalpha() | Состоит ли строка из букв |
| S.isalnum() | Состоит ли строка из цифр или букв |
| S.islower() | Состоит ли строка из символов в нижнем регистре |
| S.isupper() | Состоит ли строка из символов в верхнем регистре |
| S.isspace() | Состоит ли строка из неотображаемых символов (пробел, символ перевода страницы (‘\f’), «новая строка» (‘\n’), «перевод каретки» (‘\r’), «горизонтальная табуляция» (‘\t’) и «вертикальная табуляция» (‘\v’)) |
| S.istitle() | Начинаются ли слова в строке с заглавной буквы |
| S.upper() | Преобразование строки к верхнему регистру |
| S.lower() | Преобразование строки к нижнему регистру |
| S.startswith(str) | Начинается ли строка S с шаблона str |
| S.endswith(str) | Заканчивается ли строка S шаблоном str |
| S.join(список) | Сборка строки из списка с разделителем S |
| ord(символ) | Символ в его код ASCII |
| chr(число) | Код ASCII в символ |
| S.capitalize() | Переводит первый символ строки в верхний регистр, а все остальные в нижний |
| S.center(width, [fill]) | Возвращает отцентрованную строку, по краям которой стоит символ fill (пробел по умолчанию) |
| S.count(str, [start],[end]) | Возвращает количество непересекающихся вхождений подстроки в диапазоне [начало, конец] (0 и длина строки по умолчанию) |
| S.expandtabs([tabsize]) | Возвращает копию строки, в которой все символы табуляции заменяются одним или несколькими пробелами, в зависимости от текущего столбца. Если TabSize не указан, размер табуляции полагается равным 8 пробелам |
| S.lstrip([chars]) | Удаление пробельных символов в начале строки |
| S.rstrip([chars]) | Удаление пробельных символов в конце строки |
| S.strip([chars]) | Удаление пробельных символов в начале и в конце строки |
| S.partition(шаблон) | Возвращает кортеж, содержащий часть перед первым шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий саму строку, а затем две пустых строки |
| S.rpartition(sep) | Возвращает кортеж, содержащий часть перед последним шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий две пустых строки, а затем саму строку |
| S.swapcase() | Переводит символы нижнего регистра в верхний, а верхнего – в нижний |
| S.title() | Первую букву каждого слова переводит в верхний регистр, а все остальные в нижний |
| S.zfill(width) | Делает длину строки не меньшей width, по необходимости заполняя первые символы нулями |
| S.ljust(width, fillchar=» «) | Делает длину строки не меньшей width, по необходимости заполняя последние символы символом fillchar |
| S.rjust(width, fillchar=» «) | Делает длину строки не меньшей width, по необходимости заполняя первые символы символом fillchar |
| S.format(*args, **kwargs) | Форматирование строки |
Для вставки кода на Python в комментарий заключайте его в теги
python и вывод текста. Как сделать текст на выходе Жирным или увеличить шрифт
Есть фрагмент текста, который необходимо обработать. В около конечной части кода выглядит примерно так:
param = "500.10" text = f"на данный момент такой то"
В данный вывод собирается в кучу строк и передается почтовому клиенту. Хотелось бы именно в текстовом фрагменте сам param выделять отдельным цветом или жирным и увеличить шрифт. Подскажите, можно ли реализовать без привлечения каких либо дополнительных библиотек?
Можно ли в Text выделять какие то слова? Если да, то как?
Можно ли в Text выделять какие то слова? Допустим, есть gui программа на python и tkinter. И всегда, когда пользователь пишет "Привет", это слово выделяется желтым цветом. То-есть, все "Привет" в тексте должны выделяться желтым цветом.
Я смог понять, как можно сделать постоянную проверку на наличие этого:
1.
def checkSyntax(): #тут будет находиться проверка и выполнение
checkSyntax() # а это будет находиться перед root.mainloop()
Можно ли сделать такой эффект редактора, как в Sublime Text или Notepad++?
- Вопрос задан более трёх лет назад
- 484 просмотра
Комментировать
Решения вопроса 1
Вот, например, простой пример выделения цветом:
def __create_problem_description_frame(self): # здесь создаем сам виджет - self.problem_description_body # self - это tk.Frame # непосредственно вся логика def f1(_event): # ищем выделенный текст, но никак его не проверяем - одна буква или слово - без разницы if self.problem_description_body.tag_ranges(tk.SEL): print('SELECTED Text is %r' % self.problem_description_body.get(tk.SEL_FIRST, tk.SEL_LAST)) else: print('NO Selected Text') return # в тексте ищем точные совпадения pattern = str(self.problem_description_body.get(tk.SEL_FIRST, tk.SEL_LAST)) start = self.problem_description_body.index("1.0") end = self.problem_description_body.index("end") self.problem_description_body.mark_set("matchStart", start) self.problem_description_body.mark_set("matchEnd", start) self.problem_description_body.mark_set("searchLimit", end) # как будем выделять - название тэга и желтый фон self.problem_description_body.tag_configure("yellow", background="#ffff99") # погнали искать все совпадения count = tk.IntVar() while True: # непосредственно сам поиск index = self.problem_description_body.search( pattern, "matchEnd", "searchLimit", count=count, regexp=True) if index == "": break if count.get() == 0: break # и, наконец, выделение найденного фрагмента текста тэгом с именем yellow self.problem_description_body.mark_set("matchStart", index) self.problem_description_body.mark_set("matchEnd", "%s+%sc" % (index, count.get())) self.problem_description_body.tag_add("yellow", "matchStart", "matchEnd") # биндим срабатывание на отпускание кнопки мыши self.problem_description_body.bind('', f1)
Проверено, что работает в питоне 3.7. Выделение происходит навсегда - здесь нет очистки выделения. Выделение - по отпусканию левой кнопки мыши на самом виджете. Ну, и, конечно, говнокодец - лишь бы заработало.
Ответ написан более трёх лет назад

Константин @FireFall Автор вопроса
Спасибо. Щас посмотрю, если что то не заработает, то ничего, сам попробую исправить

Константин @FireFall Автор вопроса
Я не понимаю, как это работает, и что нужно сделать, чтобы БЫЛ ЭФФЕКТ КАК В РЕДАКТОРАХ КОДА
Константин Юров, как это работает - выделяешь мышкой в тексте кусок непустой, который потом ищется во всем тексте и выделяется желтым фоном. Если к этому всему прибавить очистку выделения желтым фоном при пустом выделении мышкой, то получится что-то похожее на эффект, как в редакторах. Отдаленно похожее.
Вместо выделения мышкой можно просто получать позицию текстового курсора или указателя мыши, определять по этому положению слово в тексте и также искать/выделять. Тогда придется добавить еще и какой-то другой триггер запуска выделения/очистки, например, раз в единицу времени.
Ответы на вопрос 0
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Python
- +2 ещё
Как реализовать изменение данных анкеты в БД через inline клавиатуру в телеграм боте?
- 1 подписчик
- 22 минуты назад
- 12 просмотров
Как выделить слово жирным шрифтом?
Всем привет, у меня появилась такая проблемка с телеботом. У меня получается есть мини-бот, пользователь отправляет ему текст с городом и тот показывает ему погоду в этом городе.
Я хочу сделать, чтобы при обратной отправке сообщения ботом, город выделялся жирным шрифтом, но как это грамотно сделать, я так и не смог найти.
Ниже будет только часть функции, мне нужно, чтобы message.text выделялась жирным шрифтом.
@bot.message_handler(content_types=['text']) def send_echo(message): mgr = owm.weather_manager() observation = mgr.weather_at_place( message.text ) w = observation.weather temp = w.temperature('celsius')["temp"] clouds = w.detailed_status ans = "В городе " + message.text + " сейчас - " + clouds + "." + "\n" ans += "Температура в данный момент: " + str(round(temp)) + "°." + "\n\n"

Вот скрин, надо чтобы "Москва" выделялась жирным шрифтом(взято как пример, а так любой другой город):
- Вопрос задан более трёх лет назад
- 7738 просмотров
Комментировать
Решения вопроса 1
tfosk @tfosk Автор вопроса
Получилось выделить слово, которое я хотел, но появилась вторая проблемка, после вывода сообщения, следующее
сообщение не выводится. Как добавить ветвление ещё туда?
Вот, код как у меня получилось выделить сообщение:
bot.send_message(message.chat.id, f"В городе сейчас - \n" + "Температура в данный момент: " + str(round(temp)) + "°." + "\n\n", parse_mode='html')
Так и вот это мне нужно, чтобы вместе со всем выводилось, но как?
if temp < 10: ans +=("Тебе лучше сегодня надеть, что-нибудь потеплее, а то там холодновато.") elif temp < 20: ans +=("На улице и не тепло, и не жарко.") else: ans +=("Ну тепло, иди в трусах)")
Ответ написан более трёх лет назад
Тогда так и нужно, сначала сформировать текстовую строку с форматированием и разными условиям, а потом уже выводить ее через send_message.
ans = f"В городе сейчас - \n" + "Температура в данный момент: " + str(round(temp)) + "°." + "\n\n" if temp < 10: ans +=("Тебе лучше сегодня надеть, что-нибудь потеплее, а то там холодновато.") elif temp < 20: ans +=("На улице и не тепло, и не жарко.") else: ans +=("Ну тепло, иди в трусах)") bot.send_message(message.chat.id, ans, parse_mode='html')