Цитирование обратных косых черт в строковых литералах Python
У меня есть строка, которая содержит как двойные кавычки, так и обратную косую черту, которые я хочу установить для переменной в Python. Однако, когда я пытаюсь установить его, кавычки или косые черты либо удаляются, либо экранируются. Вот пример:
>>> foo = 'baz "\"'
>>> foo
'baz ""'
Итак, вместо baz "\"
, как я хочу, я получаю baz ""
. Если я попытаюсь избежать обратную косую черту, это тоже не поможет:
>>> foo = 'baz "\\"'
>>> foo
'baz "\\"'
Что теперь соответствует тому, что я вложил, но не то, что я изначально хотел. Как вы обошли эту проблему?
Ответы
Ответ 1
Вы вводите в заблуждение вывод - второй подход, который вы делаете, делает то, что вы хотите, вы просто не верите в это.:)
>>> foo = 'baz "\\"'
>>> foo
'baz "\\"'
>>> print foo
baz "\"
Кстати, есть еще одна строковая форма, которая может быть немного яснее:
>>> print r'baz "\"'
baz "\"
Ответ 2
Использовать необработанную строку:
>>> foo = r'baz "\"'
>>> foo
'baz "\\"'
Обратите внимание, что, хотя это выглядит неправильно, это действительно так. В строке foo
есть только одна обратная косая черта.
Это происходит потому, что, когда вы просто вводите foo
в приглашении, python отображает результат __repr__()
в строке. Это приводит к следующему (обратите внимание только на одну обратную косую черту и без кавычек вокруг строки print
ed):
>>> foo = r'baz "\"'
>>> foo
'baz "\\"'
>>> print foo
baz "\"
И продолжайте идти, потому что больше обратных коллажей. Если вы хотите иметь обратную косую черту в конце строки и использовать описанный выше метод, вы столкнетесь с проблемой:
>>> foo = r'baz \'
File "<stdin>", line 1
foo = r'baz \'
^
SyntaxError: EOL while scanning single-quoted string
Необработанные строки не работают должным образом, когда вы это делаете. Вы должны использовать обычную строку и избегать обратных косых черт:
>>> foo = 'baz \\'
>>> print foo
baz \
Однако, если вы работаете с именами файлов Windows, вы испытываете некоторую боль. Что вы хотите сделать, это использовать косые черты и функцию os.path.normpath()
:
myfile = os.path.normpath('c:/folder/subfolder/file.txt')
open(myfile)
Это спасет много побегов и разрывов. Эта страница была удобна, когда вы проходили через это некоторое время назад.
Ответ 3
Что сказал Харли, за исключением последнего пункта - на самом деле не нужно менять "/в" перед открытием. Windows очень рада принять дорожки с косой чертой.
infile = open('c:/folder/subfolder/file.txt')
Единственный раз, когда вам, вероятно, понадобится строка с нормальным доступом, - это переход к другой программе через оболочку (с помощью модуля os.system
или subprocess
).
Ответ 4
Другой способ закончить строку с обратным слэшем - это закончить строку с обратным слэшем, за которым следует пробел, а затем вызвать функцию .strip()
в строке.
Я пытался объединить две строковые переменные и разделил их на обратную косую черту, поэтому я использовал следующее:
newString = string1 + "\ ".strip() + string2