Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.51/65: Рейтинг темы: голосов - 65, средняя оценка - 4.51
0 / 0 / 0
Регистрация: 30.09.2010
Сообщений: 21

Скрипт поиска и замены для notepad++ на Python

07.03.2013, 00:04. Показов 13781. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть программа для который нужно обычный текст заменять на коды. Например.
для вставки
"exit"
будет так
KEYDOWN(69)
KEYUP(69)
KEYDOWN(88)
KEYUP(88)
KEYDOWN(73)
KEYUP(73)
KEYDOWN(84)
KEYUP(84)
нужек скрипт для Notepad ++ или другая программа который будет заменять по такому прицепу:

"e"
заменить на
KEYDOWN(69)\nKEYUP(69)
"x"
заменить на
KEYDOWN(88)\nKEYUP(88)
"i"
заменить на
KEYDOWN(73)\nKEYUP(73)
"t"
заменить на
KEYDOWN(84)\nKEYUP(84)

вот такой список для всего алфавита и чисел создать что бы при вставке слов смотрело есть ли буквы которые нужно заменить на код.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.03.2013, 00:04
Ответы с готовыми решениями:

Скрипт для поиска и замены в notepad (xml файл)
Добрый день! Подскажите, есть xml файл (много тысяч строк), в нем есть справки по нумерации, в каждой справке есть информация по налогу....

Скрипт поиска и замены текста в файле
Всем привет! Помогите пожалуйста написать простой скрипт по поиску и замены текста в файле. Есть текст такого вида: Как видно...

Скрипт поиска и замены цвета ячеек
Добрый день. Помогите со скриптом поиска и замены цвета ячеек. Нужно найти все зеленые, желтые и черные ячейки и заменить их цвет на серый.

29
363 / 334 / 38
Регистрация: 29.03.2011
Сообщений: 838
14.03.2013, 00:34
Студворк — интернет-сервис помощи студентам
accept,

Не по теме:

Опять не совсем по теме, но раз уж помогаешь тут :)
Есть функция, вот такая:

Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
tokens_re = re.compile( '(?:{0})(.*?)(?:{1})'.format(
        re.escape('{{'), re.escape('}}')), re.M
)
 
def parse_text(text, keywords):
    assert isinstance( text, str ), "text must be string"
    assert isinstance( keywords, dict), "keywords must be dict"
    result = []
    splitted = tokens_re.split(text)
    in_token = False
    for s in splitted:
        if in_token:
            token = s.strip()
            if token in keywords:
                result.append( keywords[token] )
        else:
            result.append(s)
        in_token = not in_token
    return ''.join( result )
 
 
if __name__ == "__main__":
    keywords = {
        'first':'Первый',
        'second':'Второй',
        'fird': 'Четвертый',
    }
    text = """Вошел {{ first }} человек, получил по шее, подошёл к нему {{ second }},
и говорит, такой:
 - A ты знаешь, что {{ third }} уже не тот!
 - Ну и что с того? - спрашивает {{ first}}..
 - Как, что.. Удивился {{ first }}, но это он на словах удивился, а в мыслях
ему глубоко {{ cenzored }} и на {{ third }} и, что {{ first }} его не понял."""
    
    print parse_text( text, keywords )

Переписал недавно одну старую свою функцию, (раньше пользовался format и ловил исключения, но там проблем много было). Во первых - критику по стилю хочу, может что можно ещё улучшить, во вторых - утиная типизация. keywords не обязан быть dict, достаточно, чтобы он вел себя похоже (имел пары key,value). Но в голову ничего не приходит..

0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
14.03.2013, 01:53
Цитата Сообщение от sKotenok Посмотреть сообщение
Python
1
isinstance( text, str )
вообще, так не принято делать, ввиду того что isinstance() может неправильно выдать результат, так как в ней рассматривается наследование
вместо этого делают какое-то действие, которое порождает исключение, если объект не того типа

Цитата Сообщение от sKotenok Посмотреть сообщение
Python
1
'(?:{0})(.*?)(?:{1})'
не понял, зачем незахватывающие группы

Цитата Сообщение от sKotenok Посмотреть сообщение
Python
1
token = s.strip()
зачем выполнять .strip(), удали их прямо в выражении

Цитата Сообщение от sKotenok Посмотреть сообщение
Python
1
re.M
этот флаг делает начало и конец у каждой строки внутри строки (чтобы работали ^ и $)
чтобы просто обрабатывать переводы строк, используй re.S
1
363 / 334 / 38
Регистрация: 29.03.2011
Сообщений: 838
14.03.2013, 01:58
accept,
Незахватывающие группы - чтобы сами кавычки ( {{ и }} ) в результат не попали.
Да, пробелы можно и сразу регэкспом убирать, просто было уже лень возиться, ну и вопрос все же не про это.
вместо этого делают какое-то действие, которое порождает исключение, если объект не того типа
Можно на примере или чуть подробнее? Заранее спасибо.
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
14.03.2013, 02:13
Цитата Сообщение от sKotenok Посмотреть сообщение
Незахватывающие группы - чтобы сами кавычки ( {{ и }} ) в результат не попали.
ну, я так и подумал, нужно их убрать - они и так не попадут в результат

Цитата Сообщение от sKotenok Посмотреть сообщение
Да, пробелы можно и сразу регэкспом убирать
вот именно, и пара символов сэкономит строку
было так:
Python
12
13
14
15
        if in_token:
            token = s.strip()
            if token in keywords:
                result.append( keywords[token] )
а станет так:
Python
12
13
        if in_token and s in keywords:
            result.append( keywords[s] )
Цитата Сообщение от sKotenok Посмотреть сообщение
Можно на примере или чуть подробнее?
http://www.voidspace.org.uk/py... ping.shtml
1
363 / 334 / 38
Регистрация: 29.03.2011
Сообщений: 838
14.03.2013, 02:54
Прочитал статью, заменил 2й assert на:
Python
1
2
assert hasattr(keywords, 'keys') and ( hasattr(keywords, '__getitem__') \
    or hasattr(keywords,'__iter__') ), "keywords must be dict or dict-like object!"
Учитывая эти 2 строки в статье:
isinstance(object, dict) returns True if object is a dictionary - or an instance of a subclass of dict.
...
string like object should inherit from str
То, как я понял, автора, 1й assert нужно оставить (Если кто-то наследовался от строки так, что регэкспы перестали работать - по идее, это не проблема данной функции). Лучше пока в голову не пришло.
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
14.03.2013, 03:59
Цитата Сообщение от sKotenok Посмотреть сообщение
Если кто-то наследовался от строки так, что регэкспы перестали работать
регулярные выражения ни при чём - если assert пропустил что-то как строку, а это не строка, то это ошибка
вопрос вообще в том, зачем ты делаешь эти assert'ы, проверяющие типы, так никто не делает
0
363 / 334 / 38
Регистрация: 29.03.2011
Сообщений: 838
14.03.2013, 11:32
accept, А как делать правильно?
Раньше assert-ов не было вообще, но с text вопросов не возникало (просто выдаст регэксп исключение, если не сможет обработать),
другое дело - keywords. Вполне можно передать вместо dict, например, set и функция проглотит его, не выдавая никаких ошибок, но естественно, это будет не то, что от неё ожидается (уже разок ошибался в одной букве и потом долго ловил, где баг)

Подумал, что требования к keywords должны быть следующие:
-имеет пары ключ-значение, это просто.
-и ключ и значение должны быть строками (или unicode-обьетками). Тут придется подумать, пока остановился на том же isinstance()
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
14.03.2013, 17:53
Цитата Сообщение от sKotenok Посмотреть сообщение
например, set и функция проглотит его
Цитата Сообщение от sKotenok Посмотреть сообщение
Python
1
keywords[token]
Python
1
2
3
4
5
6
7
8
>>> parse_text('abcd', {'a', 'b', 'c'})
'abcd'
>>> parse_text('abcd {{a}}', {'a', 'b', 'c'})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 9, in parse_text
TypeError: 'set' object has no attribute '__getitem__'
>>>
Цитата Сообщение от sKotenok Посмотреть сообщение
А как делать правильно?
почитай какие-нибудь книжки, исходники
потому что все эти ошибки у тебя из-за того, что ты не читаешь профессиональную литературу, где всё уже давно расписано вдоль и поперёк

правильно - не перегружать функции ненужными проверками; если тебе нужно что-то проверить, если это действительно нужно, то это делается за пределами функции
1
363 / 334 / 38
Регистрация: 29.03.2011
Сообщений: 838
14.03.2013, 20:07
accept, программирование для меня - не основной вид деятельности (я вообще сисадмин), поэтому опыта во многом не хватает. Ну и сейчас больше на javascript пишу, чем на питоне, поэтому иногда путаю подходы. ( скажем "if type(text) is str" - перефразированное "if ( type(text) === 'string' )" с js - переключить контекст не успел ). Но ругаешь меня по делу, а значит давай выкладывай, чего надо почитать ещё.
Что я уже когда-то читал (больше года назад):
- Лутц - "Программирование на Python",
- Саммерфилд - "Программирование на Python3",
- Откидач и компания - "Язык программирования Python".
Думаю, это все можно отнести к книгам "для новичков", поэтому давно уже их не открывал. Сейчас пользуюсь в основном питоновской справкой, но чтобы там что-то найти, нужно знать, что искать.
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
14.03.2013, 20:47
Цитата Сообщение от sKotenok Посмотреть сообщение
я вообще сисадмин
https://www.cyberforum.ru/post2447265.html

Цитата Сообщение от sKotenok Посмотреть сообщение
Ну и сейчас больше на javascript пишу, чем на питоне, поэтому иногда путаю подходы. ( скажем "if type(text) is str" - перефразированное "if ( type(text) === 'string' )" с js - переключить контекст не успел ).
дело не в этом, это кодерство, а кодерство ничего из себя не представляет
например, то, что у тебя много букв, это из-за того, что ты не представляешь блок-схему (этому учат в институтах, сначала заставляют их рисовать, а потом они становятся представляемыми)
у тебя не установлена стратегия разработки: сначала словесное описание, затем блок-схема, затем псевдокод, затем реализация
поэтому ты сначала пишешь код, а потом начинаешь его подправлять

Цитата Сообщение от sKotenok Посмотреть сообщение
- Лутц - "Программирование на Python",
Лутца можно прочитать, чтобы узнать питон, но узнавание питона не научит программировать

Цитата Сообщение от sKotenok Посмотреть сообщение
Думаю, это все можно отнести к книгам "для новичков", поэтому давно уже их не открывал.
я думаю, ты читаешь их по диагонали, обрывочно, чтобы за один день научиться программировать
книги нужно читать внимательно: выбрать одну, выделив её среди разного рода псевдопрофессиональных (типа Шилдта) и читать всё, что в ней даётся, усваивая материал (то есть брать время для усваивания), а не проскакивать

а вот это вот - типа глянул, и всё узнал - это туфта для школьников

примеры, как делаются assert'ы посмотришь в книге у Кушниренко
assert'ы вообще никогда не должны срабатывать
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.03.2013, 20:47

Скрипт поиска и замены цвета текста
Ещё раз здравствуйте. Помогите со скриптом поиска и замены цвета текста белого на черный. Заранее благодарен.

Программа поиска и замены на Python или С++
Нужно написать программу, работающую по типу Поиска и Замены в Ворде. Но при этом замена должна происходить на случайно-сгенерированное...

Скрипт пакетного поиска и замены в MS-office файлах
Нужно обезличить десятки файлов офис (Excel, Word, PowerPoint) - заменить конкретные названия и фамилии на коды или кодовые названия. Таких...

Регулярные выражения для замены в Notepad
Здравствуйте. Помогите с регулярным выражением в Notepad++ Имеется: &lt;p&gt;site.com/random1515115&lt;/p&gt; Таких ссылок много Нужно...

Можно ли создать маску для Notepad++ для массовой замены
Добрый день ребят вообщем имею постоянно пополняющиеся файлы TXT и работаю с ними в Notepad++ мне нужна массовая замена - к примеру в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru