Строка формата Python со строкой, которая содержит одну обратную косую черту - PullRequest
0 голосов
/ 23 октября 2019

У меня есть простая, но раздражающая проблема. Мне нужно отформатировать строку со строкой, которая содержит одну кавычку. Допустим, у меня есть эта строка для форматирования;

string_to_be_formatted = "Hello, {ANOTHER_STRING}"

Затем у меня есть другая строка;

another_string = r"You\'re genius"

Итак, в конце я бы хотел получить строку как;

formatted_string = "Hello, You\'re genius"

Когда я печатаю переменную formatted_string, она печатается, как и ожидалось, однако, когда я использую ее как переменную и форматирую запрос с ней, она использует представление строки. До сих пор я пытался;

  • literal_eval, который вызывает исключение из-за одиночной обратной косой черты
  • Форматировать строку с параметром '! S', тот же результат

Любая помощь приветствуется.

Редактировать: Я думаю, что это, скорее всего, связано с Python clickhouse_driver. Извините, я открою вопрос об этом.

1 Ответ

0 голосов
/ 23 октября 2019

Вы использовали необработанную строку для определения ваших данных. Это означает, что последняя строка будет по-прежнему содержать обратную косую черту. Если это ошибка, решение легко.

>>> template = "Hello, {data}"
>>> value = "You\'re genius"
>>> template.format(data=value)
"Hello, You're genius"

Если у вас действительно есть строка с обратной косой чертой и одинарной кавычкой, вы можете использовать literal_eval, но вы должны принятьучтите, что вам придется добавлять кавычки в конце и в начале.

>>> template = "Hello, {data}"
>>> value = r"You\'re genius"  # the same as value = "You\\'re genius"
>>> template.format(data=ast.literal_eval(f'"{value}"'))
"Hello, You're genius"

Если вы используете более старую версию Python без f-строк, вы можете написать

>>> template.format(data=ast.literal_eval('"' + value + '"'))
...