Вы можете использовать str.translate
и dictionary comprehension:
>>> name = ":1?2/3<4|5"
>>> bad = ['\\', '/', ':', '*', '?', '"', '<', '>', '|']
>>> newName = name.translate({ord(c):'special char' for c in bad})
>>> newName
'special char1special char2special char3special char4special char5'
>>>
Если вы используете timeit.timeit
, вы увидите, что это метод, как правило, быстрее, чем остальные:
>>> from timeit import timeit
>>> name = ":1?2/3<4|5"
>>> bad = ['\\', '/', ':', '*', '?', '"', '<', '>', '|']
>>>
>>> timeit("import re;re.sub('[\\/:*?\"<>|]', 'special char', name)", "from __main__ import name")
11.773986358601462
>>>
>>> timeit("for char in bad: name = name.replace(char, 'special char')", "from __main__ import name, bad")
9.943640323001944
>>>
>>> timeit("name.translate({ord(c):'special char' for c in bad})", "from __main__ import name, bad")
9.48467780122894
>>>
посмотреть на [str.stranslate()] (http://docs.python.org/3/library/stdtypes.html?highlight=translate#str.translate) –
инвалиду ошибка синтаксиса начиная с первого элемента в вашем списке: '\'. Так как это escape-символ, вам нужно использовать '\\' – Cam