Как выделить текст в питоне
Перейти к содержимому

Как выделить текст в питоне

Как напечатать жирный текст на Python?

дубликат цветного текста в терминальных приложениях в Unix . Много ссылок в ответах. Этот ответ написан на C, но легко переводится на Python.

Joe 19 янв. 2012, в 10:07
Какой терминал вы используете? Вы на Unix или Windows?
Sjoerd 19 янв. 2012, в 10:08
Я использую сафари. Только что узнал, что я могу использовать теги HTML в Python.
Jia-Luo 19 янв. 2012, в 11:01
Показать ещё 1 комментарий
Поделиться:

9 ответов

class color: PURPLE = '\033[95m' CYAN = '\033[96m' DARKCYAN = '\033[36m' BLUE = '\033[94m' GREEN = '\033[92m' YELLOW = '\033[93m' RED = '\033[91m' BOLD = '\033[1m' UNDERLINE = '\033[4m' END = '\033[0m' print color.BOLD + 'Hello World !' + color.END 

Boubakr 25 июнь 2013, в 17:42
Поделиться

Лично я считаю, что это самый полезный ответ. Использование здесь: stackoverflow.com/questions/287871/…

liang 21 авг. 2013, в 05:37

Мне нравится, что вы не просто выделили жирным шрифтом, а создали целый класс, чтобы они могли ссылаться и помогать всем пользователям просматривать. Спасибо.

GreenHawk1220 09 дек. 2016, в 21:43
Я буду использовать это как дикт, а не класс. Спасибо!
dvlden 27 фев. 2017, в 20:49
@Boubakr Это не сработало для меня. Зачем?
user8167727 12 июль 2017, в 17:58
Он печатает следующее: [1mHello World ![0m
user8167727 12 июль 2017, в 17:59
что насчет python3? это швы, чтобы не работать в p3.
mm_ 17 март 2019, в 06:14
это работает для меня в Python 3.
BillyJo_rambler 02 апр. 2019, в 11:20
Показать ещё 5 комментариев

print '\033[1m' + 'Hello' 

И чтобы вернуться к нормальной жизни:

print '\033[0m' 

Эта страница является хорошей ссылкой для печати в цветах и ​​шрифтах. Перейдите в раздел «Установить графический режим:»

И обратите внимание, что это не будет работать во всех операционных системах, но вам не нужны никакие модули.

Addison 02 авг. 2012, в 19:48
Поделиться

В прямом программировании компьютера нет такой вещи, как «печать жирного текста». Давайте немного подкрепляемся и понимаем, что ваш текст представляет собой строку байтов, а байты — это просто пучки бит. Для компьютера, здесь ваш «привет» текст, в binary.

0110100001100101011011000110110001101111 

Каждый бит или ноль немного. Каждые восемь бит являются байтом. Каждый байт является в строке, подобной той, что находится в Python 2.x, одной буквенной/числовой/пунктуационной позиции (называемой символом). Так, например:

01101000 01100101 01101100 01101100 01101111 h e l l o 

Компьютер переводит эти биты в буквы, но в традиционной строке (называемой строкой ASCII) ничего не выделяется жирным шрифтом. В строке Unicode, которая работает немного по-другому, компьютер может поддерживать символы международного языка, такие как китайские, но опять же нет ничего, что могло бы сказать, что какой-то текст выделен жирным шрифтом, а какой-то текст нет. Также нет явного шрифта, размера текста и т.д.

В случае печати HTML вы все равно выводите строку. Но компьютерная программа, считывающая эту строку (веб-браузер), запрограммирована так, чтобы интерпретировать текст типа this is bold как «это жирный«, когда он преобразует вашу строку букв в пиксели на экране. Если бы весь текст был WYSIWYG, потребность в HTML сама была бы смягчена — вы бы просто выделили текст в своем редакторе и смели вместо него, вместо того, чтобы печатать HTML.

Другие программы используют разные системы — многие ответы объясняют совершенно другую систему для печати жирного текста на терминалах. Я рад, что вы узнали, как делать то, что хотите, но в какой-то момент вам захочется понять, как работают строки и память.

Ken Kinder 19 янв. 2012, в 19:00
Поделиться

Каким бы неудовлетворительным ни казался этот ответ, вероятно, именно он наиболее правильно отвечает на заданный вопрос . Это вообще не вопрос Python, а вопрос о том, что делает рендеринг .

John Y 01 дек. 2014, в 22:06
Хорошо для чтения! Мне нравится это объяснение
dvlden 27 фев. 2017, в 20:49

Дело в том, что каждый, кто интересуется ответом на этот вопрос, понимает двоичный код и то, как он используется для представления строк. Мы заинтересованы в том, как использовать python, чтобы текст выглядел жирным, на что дан ответ выше. Этот ответ слишком педантичен.

Trevor 23 июнь 2017, в 20:18
Показать ещё 1 комментарий

Отъезд colorama. Это не обязательно помогает в смелости. но вы можете сделать раскрашенный вывод как на Windows, так и на Linux и контролировать яркость:

from colorama import * init(autoreset=True) print Fore.RED + 'some red text' print Style.BRIGHT + Fore.RED + 'some bright red text' 

jszakmeister 19 янв. 2012, в 12:36
Поделиться

Существует очень полезный модуль для форматирования текста (полужирный, подчеркивание, цвета..) в Python. Он использует curses lib, но он очень прост в использовании.

from terminal import render print render('%(BG_YELLOW)s%(RED)s%(BOLD)sHey this is a test%(NORMAL)s') print render('%(BG_GREEN)s%(RED)s%(UNDERLINE)sAnother test%(NORMAL)s') 

ОБНОВЛЕНО:

Я написал простой модуль с именем colors.py, чтобы сделать это немного более питоническим:

import colors with colors.pretty_output(colors.BOLD, colors.FG_RED) as out: out.write("This is a bold red text") with colors.pretty_output(colors.BG_GREEN) as out: out.write("This output have a green background but you " + colors.BOLD + colors.FG_RED + "can" + colors.END + " mix styles") 

Diego Navarro 19 янв. 2012, в 10:17
Поделиться

ImportError: No module named terminal ImportError: No module named render На самом деле это единственный сайт, который я могу найти о модуле «терминала». Пожалуйста, дополните.

minerals 14 май 2013, в 18:09

Приведенная выше ссылка раньше содержала модуль terminal , но они перенаправили страницу. Вот код, кэшированный Google.

Diego Navarro 15 май 2013, в 10:11

В любом случае, я сделал свой собственный модуль Python, чтобы решить эту проблему, проверьте @minerals 😉

Python: Multi-line строки

Представьте, что нам нужно определить строку, которая состоит из нескольких строчек — то есть внутри есть переводы строки \n . Например, она будет выглядеть так:

text = 'Пример текста,\nсостоящего из\nнескольких строк' 

На печати строка примет совсем другой вид:

Пример текста, состоящего из нескольких строк 

Для таких ситуаций в Python есть еще один способ создания строк, который называется multi-line строки. Чтобы описать такую «многострочную строку», нужно заключить ее в тройные кавычки — «»» или »’ . Внутри multi-line строки можно переносить текст и не использовать перевод строки \n :

text = '''Пример текста, состоящего из нескольких строк ''' 
Пример текста, состоящего из нескольких строк 

Обратите внимание, что в конце текста есть пустая строка. Она появилась в тексте потому, что мы поставили закрывающие кавычки »’ на новой строке. Если не переносить закрывающие кавычки на новую строку, то пустая строка в тексте не появится:

text = '''Пример текста, состоящего из нескольких строк''' 
Пример текста, состоящего из нескольких строк 

Из-за тройных кавычек multi-line строки позволяют не экранировать кавычки внутри строки:

Здесь не нужно экранировать 'одинарные' и "двойные" кавычки 

Еще multi-line строки могут становиться f-строками для интерполяции:

a = 'A' b = 'B' # Слева добавился f text = f''' и сидели на трубе ''' 
А и B сидели на трубе 

Для компьютера неважно, какие способы соединения и переноса строк вы будете использовать. Он все равно произведет вычисления и выдаст нужный результат. Интерполяция и multi-line строки используются для удобства разработчиков, чтобы им было проще читать код.

Задание

Запишите в переменную text текст, который приведен ниже. Используйте тройные кавычки.

Lannister, Targaryen, Baratheon, Stark, Tyrell. they're all just spokes on a wheel. This one's on top, then that one's on top, and on and on it spins, crushing those on the ground. 

Упражнение не проходит проверку — что делать? ��

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

  • Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.

В моей среде код работает, а здесь нет ��

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя ��

Это нормально ��, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно ��

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.

Полезное

Как выделить текст в питоне

Для добавления текста применяется метод insert() :

insert(index, chars)

Первый параметр представляет позицию вставки в формате «line.column» — сначала идет номер строки, а затем номер символа. Второй параметр — собственно вставляемый текст. Например, вставка в начало:

editor.insert("1.0", "Hello")

Для вставки в конец для позиции передается значение END :

from tkinter import * root = Tk() root.title("METANIT.COM") root.geometry("250x200") editor = Text() editor.pack(fill=BOTH, expand=1) editor.insert("1.0", "Hello World") # вставка в начало editor.insert(END, "\nBye World") # вставка в конец root.mainloop()

Добавление строк в виджет Test в tkinter и python

Получение текста

Для получения введенного текста применяется метод get() :

get(start, end)

Параметр start указывает на начальный символ, а end — на конечный символ, текст между которыми надо получить. Оба параметра в формате «line.colunm», где line — номер строки, а «column» — номер символа. Для указания последнего символа применяется константа END:

from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("300x200") editor = Text(height=5) editor.pack(anchor=N, fill=X) label=ttk.Label() label.pack(anchor=N, fill=BOTH) def get_text(): label["text"] = editor.get("1.0", "end") button = ttk.Button(text="Click", command=get_text) button.pack(side=BOTTOM) root.mainloop()

В данном случае по нажатию на кнопку срабатывает функция get_text() , которая получает текст и передается его для отображения в метку label:

Получение введенного текста из виджета Test в tkinter и python

Удаление текста

Для удаления текста применяется метод delete()

delete(start, end)

Параметр start указывает на начальный символ, а end — на конечный символ, текст между которыми надо удалить. Оба параметра в формате «line.colunm», где line — номер строки, а «column» — номер символа. Для указания последнего символа применяется константа END. Например, определим кнопку, которая будет удалять весь текст из виджета:

from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("300x200") editor = Text(height=10) editor.pack(anchor=N, fill=BOTH) def delete_text(): editor.delete("1.0", END) button = ttk.Button(text="Clear", command=delete_text) button.pack(side=BOTTOM) root.mainloop()

Замена текста

Для замены текста применяется метод replace() :

replace(start, end, chars)

Параметр start указывает на начальный символ, а end — на конечный символ, текст между которыми надо заменить. Оба параметра в формате «line.colunm», где line — номер строки, а «column» — номер символа. Для указания последнего символа применяется константа END. Последний параметр — chars — строка, на которую надо заменить. Например, замена первых четырех символов на строку «дама»:

from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("300x200") editor = Text(height=10) editor.pack(anchor=N, fill=BOTH) editor.insert("1.0", "мама мыла раму") def edit_text(): editor.replace("1.0", "1.4", "дама") button = ttk.Button(text="Replace", command=edit_text) button.pack(side=BOTTOM) root.mainloop()

Замена текста в виджете Test в tkinter и python

Повтор и отмена операций

Методы edit_undo() и edit_redo() позволяют соответственно отменить и повторить операцию (добавление, изменение, удаление текста). Данные методы применяются, если в виджете Text параметр undo равен True. Стоит отметить, что данные методы оперируют своим стеком операций, в котором сохраняются данные операций. Однако если стек для соответствующего метода пуст, то вызов метода вызывает исключение. Простейший пример, где по нажатию на кнопку вызывается отмена или возврат операции:

from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") root.grid_columnconfigure(0, weight = 1) root.grid_columnconfigure(1, weight = 1) root.grid_rowconfigure(0, weight = 1) editor = Text(undo=True) editor.grid(column = 0, columnspan=2, row = 0, sticky = NSEW) def undo(): editor.edit_undo() def redo(): editor.edit_redo() redo_button = ttk.Button(text="Undo", command=undo) redo_button.grid(column=0, row=1) clear_button = ttk.Button(text="Redo", command=redo) clear_button.grid(column=1, row=1) root.mainloop()

Выделение текста

Для управления выделением текста виджет Text обладает следующими методами:

  • selection_get() : возвращает выделенный фрагмент
  • selection_clear() : снимает выделение

Применим данные методы:

from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") def get_selection(): label["text"]=editor.selection_get() def clear_selection(): editor.selection_clear() editor = Text(height=5) editor.pack(fill=X) label = ttk.Label() label.pack(anchor=NW) get_button = ttk.Button(text="Get selection", command=get_selection) get_button.pack(side=LEFT) clear_button = ttk.Button(text="Clear", command=clear_selection) clear_button.pack(side=RIGHT) root.mainloop()

В данном случае по нажатию на кнопку get_button срабатывает функция get_selection, которая передает в метку label выделенный текст. При нажатии на кнопку clear_button срабатывает функция clear_selection, которая снимает выделение.

События

Достаточно часто встречает необходимость обработки ввода текста. Для виджета Text определено событие > , которое срабатывает при изменении текста в текстовом поле. Однако оно срабатывает один раз. И в этом случае мы можем обработать стандартные события клавиатуры. Например, событие освобождения клавиши :

from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") def on_modified(event): label["text"]=editor.get("1.0", END) editor = Text(height=8) editor.pack(fill=X) editor.bind("", on_modified) label = ttk.Label() label.pack(anchor=NW) root.mainloop()

В данном случае при освобождении клавиши будет срабатывать функция on_modified , в которой метке label передается весь введенный текст:

обработка ввода текста в Tkinter и Python

Другую распространенную задачу представляет динамическое получение выделенного текста. В этом случае мы можем обработать событие > . Например, при выделении текста выведем выделенный фрагмент в метку Label:

from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") def on_modified(event): label["text"]=editor.selection_get() editor = Text(height=8) editor.pack(fill=X) editor.bind(">", on_modified) label = ttk.Label() label.pack(anchor=NW) root.mainloop()

Как выделить текст между маркерами?

Я хочу сделать с помощью ‘re’, но на последних двух строках кода он считает и маркеры. Можно ли это исправить? Результат должен быть такой:

assert between_markers('What is >apple', '<') == "apple", "One sym" assert between_markers("My new site", "", "") == "My new site", "HTML" assert between_markers('No[/b] hi', '[b]', '[/b]') == 'No', 'No opened' assert between_markers('No [b]hi', '[b]', '[/b]') == 'hi', 'No close' 

Отслеживать

51.6k 200 200 золотых знаков 61 61 серебряный знак 242 242 бронзовых знака

задан 7 дек 2020 в 15:18

Михайло Савчук Михайло Савчук

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *