Существуют времена, что я автоволшебно создаю маленькие сценарии оболочки из Python, и я хочу удостовериться, что аргументы имени файла не содержат неоставленные специальные символы. Я прокрутил свое собственное решение, которое я предоставлю как ответ, но я почти уверен, что видел такую функцию, потерянную где-нибудь в стандартной библиотеке. “Потерянным” я подразумеваю, что не нашел его в очевидном модуле как shlex
, cmd
или subprocess
.
Вы знаете о такой функции в stdlib? Если да, где это?
Даже отрицание (но определенный и корректный :) ответ будет принят.
pipe.quote ()
:
>>> from pipes import quote
>>> quote("""some'horrible"string\with lots of junk!$$!""")
'"some\'horrible\\"string\\\\with lots of junk!\\$\\$!"'
Обратите внимание, что в нем, возможно, есть ошибка, из-за которой аргумент нулевой длины ничего не возвращает:
>>> quote("")
''
Вероятно, было бы лучше, если бы он вернул '"" '
.
Я использую следующую функцию:
def quote_filename(filename):
return '"%s"' % (
filename
.replace('\\', '\\\\')
.replace('"', '\"')
.replace('$', '\$')
.replace('`', '\`')
)
то есть: я всегда заключаю имя файла в двойные кавычки, а затем заключаю в кавычки только специальные символы.