Я понимаю, что ответов много, но они в основном полагаются на регулярные выражения или внешние модули, поэтому я бы хотел добавить свой собственный ответ. Чистая функция Python, внешний модуль не требуется, регулярное выражение не используется. Мой подход не в том, чтобы убрать недопустимые символы, а разрешить только допустимые.
def normalizefilename(fn):
validchars = "-_.() "
out = ""
for c in fn:
if str.isalpha(c) or str.isdigit(c) or (c in validchars):
out += c
else:
out += "_"
return out
если хотите, вы можете добавить свои собственные действительные символы в переменную validchars
в начале, например, ваши национальные буквы, которых нет в английском алфавите. Это то, что вы можете или не хотите: некоторые файловые системы, которые не работают на UTF-8, могут по-прежнему иметь проблемы с не-ASCII-символами.
Эта функция предназначена для проверки правильности одного имени файла, поэтому она заменит разделители пути на _, считая их недопустимыми символами. Если вы хотите добавить это, тривиально изменить if
и включить разделитель пути os.