экранирование кавычек в python

Доброго времени суток!

Необходимо чтобы следующая строка:

pk_list_timestamp = 'date_trunc(''seconds'',' + ' '.join(row['"targetFieldName"'].lower().split()) +')'

Выводила значения вида:

date_trunc('seconds',validdateto)

На данный момент вывод следующий:

date_trunc(seconds,validdateto)

Ответы (2 шт):

Автор решения: Roman Konoval

Используйте двойные кавычки для строк, тогда в них можно включать одинарные без экранирования:

pk_list_timestamp = "date_trunc('seconds'," + ''.join(row['"targetFieldName"'].lower().split()) +')'
→ Ссылка
Автор решения: David

Есть несколько вариантов, первые два наиболее предпочтительны:

  1. Использовать двойные кавычки pk_list_timestamp = "date_trunc('seconds'," + ' '.join(row['"targetFieldName"'].lower().split()) +')' Пояснение: Если строка открывается двойной кавычкой, то и закрывается она только двойной кавычкой
  2. Экранировать кавычки внутри строки pk_list_timestamp = 'date_trunc(\'seconds\',' + ' '.join(row['"targetFieldName"'].lower().split()) +')' Пояснение: добавление символа \ перед кавычкой говорит компилятору о том, что это просто символ, а не конец строки
  3. Использовать big string pk_list_timestamp = '''date_trunc('seconds',''' + ' '.join(row['"targetFieldName"'].lower().split()) +')' Пояснение: строки, которые открываются тройными кавычками ('''текст''' или """текст""") игнорируют любые одинарные или двойные кавычки

Если интересует почему у вас результат выходит именно такой: Две строки, которые находятся друг за другом ('Текст1' 'Текст2') будут автоматически склеены интерпретатором в одну строку ('Текст1Текст2'). В вашем случае 'date_trunc(''seconds'',' преобразовывается в 'date_trunc(' + 'seconds' + ',', т.е. склеиваются.

→ Ссылка