В 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 с минимальным инвазивным вмешательством.)






Если вам нужно имя, экранированное оболочкой, вы можете использовать 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, но моя цель преподавания курса — показать интуитивный способ их написания, а это значит, что мой кайн намного длиннее. :-)
std::quoted, если для цитирования строк для файла CSV. Хотите ли вы заключить строку в кавычки для файла CSV, или вы хотите заключить строку в кавычки в Python для программы C++, или вы хотите заключить в кавычки строку в Python для Python? Под «для C++» я подразумеваю, что результатом является строка, которую можно скомпилировать с помощью компилятора C++, а под «для Python» я имею в виду, что результатом является строка, которую можно интерпретировать с помощью Python. Все это разные. В Python есть целый модуль, вы можете создать читалку, записать в нее одно поле и получить результат.