Существует ли в Python f-строка, эквивалентная std::quoted в C++?

В C++ манипулятор потока std::quoted создает версию строки в кавычках и с экранированием:

std::string dirPath = "C:\\Documents\\Oval Office Recordings\\Launch Codes.txt";

std::cout << dirPath << endl; // C:\Documents\Oval Office Recordings\Launch Codes.txt

std::cout << std::quoted(dirPath) << endl; // "C:\\Documents\\Oval Office Recordings\\Launch Codes.txt"

Существует ли прямая f-строка Python, эквивалентная std::quoted? Под «прямым» я подразумеваю «встроенный в Python», а не «вы можете создать свою собственную версию».

(Контекст: у меня есть C++ Quine, который я использую при преподавании теоретического курса, в котором для простоты используется std::quoted. Я хотел бы портировать его на Python с минимальным инвазивным вмешательством.)

std::quoted, если для цитирования строк для файла CSV. Хотите ли вы заключить строку в кавычки для файла CSV, или вы хотите заключить строку в кавычки в Python для программы C++, или вы хотите заключить в кавычки строку в Python для Python? Под «для C++» я подразумеваю, что результатом является строка, которую можно скомпилировать с помощью компилятора C++, а под «для Python» я имею в виду, что результатом является строка, которую можно интерпретировать с помощью Python. Все это разные. В Python есть целый модуль, вы можете создать читалку, записать в нее одно поле и получить результат.

KamilCuk 29.05.2024 17:12
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
89
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

import shlex
simple = shlex.quote("simple")
with_space = shlex.quote("name with space")
print(simple)  # simple
print(with_space)  # 'name with space'

Обратите внимание, что кавычки добавляются там, где они необходимы.

Ответ принят как подходящий

Вы наверняка хотите repr.

>>> print("C:\\Foo\\Bar")
C:\Foo\Bar
>>> print(repr("C:\\Foo\\Bar"))
'C:\\Foo\\Bar'

Обратите внимание, что одинарные кавычки являются допустимыми разделителями строк в Python. Для кайна вы можете использовать %r в качестве строки формата для повтора; одна из наиболее популярных кайнов — это однострочник:

_='_=%r;print(_%%_)';print(_%_)

Для f-строки или строки формата вы можете использовать модификатор !r:

>>> s = 'C:\\Foo\\Bar'
>>> print(f"{s!r}")
'C:\\Foo\\Bar'
>>> _='_ = {!r};print(_.format(_))';print(_.format(_))
_='_ = {!r};print(_.format(_))';print(_.format(_))

Да, это похоже на то, что я искал. Я знаю, что существуют очень короткие кайны Python, но моя цель преподавания курса — показать интуитивный способ их написания, а это значит, что мой кайн намного длиннее. :-)

templatetypedef 29.05.2024 19:39

Другие вопросы по теме