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

papuas
да все равно циклы повсюду…
 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
JOHN_16
можно, но тут важный вопрос для чего это делается - то есть какая конечная цель
SomethingButNotNickName
Ну в принципе уже компактнее, хотя и не так очевидно (на мой взгляд). На самом деле я надеялся, что есть аналог .find() принимающий список. Например, в каком нибуть модуле. Гугл не хочет подсказывать - пришел сюда).
SomethingButNotNickName
Конечная цель - автоматическое создание папок (скриптом). Но в строке - предполагаемом имени папки - могут встретиться символы которые виндовс не разрешает. Соответственно, чтобы не словить лишние ошибки, перед тем как запускать команду создания папки необходимо проверит наличие этих символов и заменить/удалить их.
JOHN_16
не, я не об этом. То что вы описали это очевидно. Вопрос был зачем избавляться от циклов. Если вы хотите компактней, то это можно понять. Только вот учитывайте что для именно проверки нахождения недопустимых символов в строке, условно, алгоритмически как Ваш вариант так и papuas плохи.
Теперь далее - сам постановка задачи (конкретно Вами из двух постов) не правильна. Проверить вхождение недопустимых символов и исправить ситуацию это разные вещи.
Вполне возможно что вам просто нужно re.sub

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

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


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

 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: [':', '\\', '>']
>>> 
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB