Как писать строковые литералы в Python, не экранируя их?

98

Есть ли способ объявить строковую переменную в Python таким образом, чтобы все внутри нее автоматически экранировалось или имело буквальное значение символа?

Я не спрашиваю, как избежать кавычек с помощью косой черты, это очевидно. Я прошу универсального способа сделать все в строковом литерале, чтобы мне не приходилось вручную проходить и избегать всего для очень больших строк. Кто-нибудь знает решение? Спасибо!

кьякеб
источник

Ответы:

125

Необработанные строковые литералы:

>>> r'abc\dev\t'
'abc\\dev\\t'
Тихий призрак
источник
71

Если вы имеете дело с очень большими строками, особенно с многострочными строками, помните о синтаксисе тройных кавычек :

a = r"""This is a multiline string
with more than one line
in the source code."""
Грег Хьюгилл
источник
1
Эта конструкция вводит символы разрыва строки? То есть переменная aбудет содержать строку с двумя символами разрыва строки?
MadPhysicist
7
@MadPhysicist: Да, результирующая строка будет содержать две новые строки в приведенном выше случае.
Грег Хьюгилл
Понятно. И если в этой строке используется 'split ()', будет ли она по умолчанию разбита по строкам?
MadPhysicist
1
@MadPhysicist По умолчанию для .split () используется пробел, а символы новой строки - это пробелы.
Грег Хьюгилл
1
Я использовал это раньше, и он отлично работает. Следует помнить о двух вещах: желательны отступы (пробелы) в других строках; если длинная строка заканчивается "безуспешно, потому что все закончится """" синтаксической ошибкой.
Nagev
9

Нет такого. Похоже, вам нужно что-то вроде «здесь документов» в Perl и оболочках, но у Python этого нет.

Использование необработанных строк или многострочных строк означает лишь то, что вам не о чем беспокоиться. Если вы используете необработанную строку, вам все равно придется работать с терминалом "\", и с любым строковым решением вам придется беспокоиться о закрытии ", ',' '' или" "", если оно включено в ваши данные .

То есть нет возможности иметь строку

 '   ''' """  " \

правильно хранится в любом строковом литерале Python без какого-либо внутреннего экранирования.

Эндрю Далке
источник
1

(Предполагая, что вам не требуется вводить строку непосредственно из кода Python)

чтобы обойти проблему, на которую указал Эндрю Далк, просто введите буквальную строку в текстовый файл и затем используйте ее;

input_ = '/directory_of_text_file/your_text_file.txt' 
input_open   = open(input_,'r+')
input_string = input_open.read()

print input_string

Это напечатает буквальный текст всего, что есть в текстовом файле, даже если это так;

 '   ''' """   \

Неинтересно или оптимально, но может быть полезно, особенно если у вас есть 3 страницы кода, для которых требуется экранирование символов.

Джефф Хайкин
источник
-1

если строка является переменной, используйте расширение.repr метод на нем:

>>> s = '\tgherkin\n'

>>> s
'\tgherkin\n'

>>> print(s)
    gherkin

>>> print(s.__repr__())
'\tgherkin\n'
маркировка
источник
Но разве это не считается плохим стилем?
shah.shah
что, корнишоны?
отметка
1
вы можете использовать repr(s)вместо этого для лучшего стиля
xuiqzy