Уведомления

Группа в Telegram: @pythonsu

#1 Март 5, 2018 14:10:08

SomethingButNotNickName
Зарегистрирован: 2017-12-19
Сообщения: 75
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка строки на наличие запрещенных символов

Добрый день.
Есть список запрещенных символов. Хочу проверить их наличие в строке.

 exceptions = ['\\', '/', '|', '<', '>', '?', ':', '"', '*']
test_str = 'some:text'
for i in exceptions:
    if test_str.find(i)  != -1:
        print('все пропало')
А без явного запуска цикла по списку исключений можно? Ну например передать список исключений в .find()? Или какой другой метод/функция?

Отредактировано SomethingButNotNickName (Март 5, 2018 14:54:15)

Офлайн

#2 Март 5, 2018 15:29:01

papuas
Зарегистрирован: 2015-06-19
Сообщения: 159
Репутация: +  6  -
Профиль   Отправить e-mail  

Проверка строки на наличие запрещенных символов

да все равно циклы повсюду…

 exceptions = ['\\', '/', '|', '<', '>', '?', ':', '"', '*']
test_str = 'some:text\\>'
g = lambda x: print(x) if x in exceptions else None
list(map(g, test_str))
:
\
>
Process finished with exit code 0

Отредактировано papuas (Март 5, 2018 15:29:11)

Офлайн

#3 Март 5, 2018 15:37:30

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Проверка строки на наличие запрещенных символов

можно, но тут важный вопрос для чего это делается - то есть какая конечная цель



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Март 5, 2018 15:41:08

SomethingButNotNickName
Зарегистрирован: 2017-12-19
Сообщения: 75
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка строки на наличие запрещенных символов

Ну в принципе уже компактнее, хотя и не так очевидно (на мой взгляд). На самом деле я надеялся, что есть аналог .find() принимающий список. Например, в каком нибуть модуле. Гугл не хочет подсказывать - пришел сюда).

Офлайн

#5 Март 5, 2018 15:44:18

SomethingButNotNickName
Зарегистрирован: 2017-12-19
Сообщения: 75
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка строки на наличие запрещенных символов

Конечная цель - автоматическое создание папок (скриптом). Но в строке - предполагаемом имени папки - могут встретиться символы которые виндовс не разрешает. Соответственно, чтобы не словить лишние ошибки, перед тем как запускать команду создания папки необходимо проверит наличие этих символов и заменить/удалить их.

Офлайн

#6 Март 5, 2018 15:52:14

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Проверка строки на наличие запрещенных символов

не, я не об этом. То что вы описали это очевидно. Вопрос был зачем избавляться от циклов. Если вы хотите компактней, то это можно понять. Только вот учитывайте что для именно проверки нахождения недопустимых символов в строке, условно, алгоритмически как Ваш вариант так и papuas плохи.
Теперь далее - сам постановка задачи (конкретно Вами из двух постов) не правильна. Проверить вхождение недопустимых символов и исправить ситуацию это разные вещи.
Вполне возможно что вам просто нужно re.sub



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#7 Март 5, 2018 16:10:18

SomethingButNotNickName
Зарегистрирован: 2017-12-19
Сообщения: 75
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка строки на наличие запрещенных символов

JOHN_16
Проверить вхождение недопустимых символов и исправить ситуацию это разные вещи.
Согласен, и это планировалось делать разными функциями, но перед тем как что-то исправлять, я хотел провести проверку, а надо ли что-то исправлять.
На входе тысячи имен, правки требуют единицы.
re.sub действительно поможет исправить имена и сделает это быстрее моего варианта (цикл по строке с удалением лишнего), спасибо.
Проверка планировалась с целью сокращения времени работы всего скрипта. Мой вариант явно не сократит его.

Так вот возвращаясь к первому вопросу - Как проверить, чтобы это было быстро? Ну по крайней мере быстрее, чем использование re.sub на изначально соответствующей строке.


Отредактировано SomethingButNotNickName (Март 5, 2018 16:10:46)

Офлайн

#8 Март 5, 2018 16:16:36

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Проверка строки на наличие запрещенных символов

В питоне есть такой модуль timeit, который поможет понять какой кусок кода работает быстрее.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#9 Март 5, 2018 16:20:43

SomethingButNotNickName
Зарегистрирован: 2017-12-19
Сообщения: 75
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка строки на наличие запрещенных символов

JOHN_16
В питоне есть такой модуль timeit, который поможет понять какой кусок кода работает быстрее.
Знаком и проверю время работы, когда Вы напишете, как осуществить проверку вхождения символа

Офлайн

#10 Март 5, 2018 16:26:43

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Проверка строки на наличие запрещенных символов

примерно так:

 import re
test_str = 'some:text\>'
exception_chars = '\\\/\|<>\?:"\*'
find_exceptions = re.compile('([{}])'.format(exception_chars))
res = find_exceptions.findall(test_str)
if res:
    print('string "{}" contains except chars: {}'.format(test_str, res))
>>> 
string "some:text\>" contains except chars: [':', '\\', '>']
>>> 



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version