Я думаю, что самый безопасный подход - заменить подозрительных персонажей. Итак, я думаю, что вы можете просто заменить (или избавиться) все, что не является буквенно-цифровым, -, _, пробел или точку. И вот как вы это делаете:
import re
re.sub('[^\w\-_\. ]', '_', filename)
Приведенное выше экранирует каждый символ, который не является буквой '_'
, '-'
, '.'
или пробелом с '_'
. Поэтому, если вы просматриваете весь путь, вам также нужно добавить os.sep в список разрешенных символов.
Вот пример вывода:
In [27]: re.sub('[^\w\-_\. ]', '_', 'some\\*-file._n\\\\ame')
Out[27]: 'some__-file._n__ame'