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

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

07.03.2013, 00:04. Показов 13624. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru