Подтвердить что ты не робот

Цитирование обратных косых черт в строковых литералах Python

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

>>> foo = 'baz "\"'
>>> foo
'baz ""'

Итак, вместо baz "\", как я хочу, я получаю baz "". Если я попытаюсь избежать обратную косую черту, это тоже не поможет:

>>> foo = 'baz "\\"'
>>> foo
'baz "\\"'

Что теперь соответствует тому, что я вложил, но не то, что я изначально хотел. Как вы обошли эту проблему?

4b9b3361

Ответ 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