Строки. Функции и методы строк
Итак, о работе со строками мы немного поговорили, теперь поговорим о функциях и методах строк.
Я постарался собрать здесь все строковые методы и функции, но если я что-то забыл — поправляйте.
Базовые операции
- Конкатенация (сложение)
При вызове методов необходимо помнить, что строки в 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')