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


98

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

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

Ответы:



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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.