#python #escaping #sequence
#python #экранирование #последовательность
Вопрос:
Я хотел бы иметь в файле g текст типа
stat.run('Export RStd 'distFunc.txt' overwrite')
Я использую варианты
g.write("stat.run('Export RStd ")
g.write("'distFunc.txt")
g.write("' overwrite')n")
однако из-за escape-последовательности и ‘ код не работает. Я перепробовал множество вариантов, и одна строка была невозможна для меня. Итак, я попытался разделить ее на три строки и проанализировать, но все равно эта escape-последовательность проблематична!
Кто-нибудь может предложить способ сделать это?
с уважением
Комментарии:
1. «код не работает» . Итак, вы получаете сообщение об ошибке или …?
2. просто сделайте
stat.run("Export RStd 'distFunc.txt' overwrite")
вам не придется экранировать кавычки с помощью двойных кавычек.
Ответ №1:
Используйте необработанную строку (с префиксом r
) и тройные кавычки (последовательность из трех '
или "
символов подряд). Внутри необработанной строки обратная косая черта не является волшебной. Внутри строки, заключенной в тройные кавычки, ни одинарные, ни двойные кавычки не являются волшебными. Следующие две полные программы эквивалентны:
with open ("g", "w") as g:
g.write(r'''stat.run('Export RStd 'distFunc.txt' overwrite')''')
with open ("g", "w") as g:
g.write(r"""stat.run('Export RStd 'distFunc.txt' overwrite')""")
Или используйте необработанные строки с двойными кавычками. Внутри строки, заключенной в двойные кавычки, одинарные кавычки не являются волшебными:
with open ("g", "w") as g:
g.write(r"stat.run('Export RStd 'distFunc.txt' overwrite')")
Или, если вы не хотите использовать необработанные строки, вы можете экранировать обратную косую черту:
with open ("g", "w") as g:
g.write("stat.run('Export RStd \'distFunc.txt\' overwrite')")
Наконец, если вам необходимо использовать строку, заключенную в одинарные кавычки, вы можете экранировать одинарные кавычки:
with open ("g", "w") as g:
g.write('stat.run('Export RStd \'distFunc.txt\' overwrite')')
Пожалуйста, поймите, что каждая из приведенных выше строк исходного кода называет точно такую же строку. Даже если они представлены по-разному в исходном коде, все результирующие строки равны:
assert (
r'''stat.run('Export RStd 'distFunc.txt' overwrite')''' ==
r"""stat.run('Export RStd 'distFunc.txt' overwrite')""" ==
r"stat.run('Export RStd 'distFunc.txt' overwrite')" ==
"stat.run('Export RStd \'distFunc.txt\' overwrite')" ==
'stat.run('Export RStd \'distFunc.txt\' overwrite')')
Комментарии:
1. не могли бы вы, пожалуйста, немного объяснить это? это было бы полезно для последующих реализаций. С уважением!