Comment écrire des littéraux de chaîne en python sans avoir à les échapper?

97

Existe-t-il un moyen de déclarer une variable de chaîne en python de sorte que tout ce qui s'y trouve est automatiquement échappé ou a sa valeur de caractère littérale?

Je ne demande pas comment échapper aux guillemets avec des barres obliques, c'est évident. Ce que je demande, c'est un moyen général de rendre tout ce qui est littéral dans une chaîne afin de ne pas avoir à passer manuellement et à tout échapper pour les très grandes chaînes. Quelqu'un connaît-il une solution? Merci!

kjakeb
la source

Réponses:

125

Littéraux de chaîne bruts:

>>> r'abc\dev\t'
'abc\\dev\\t'
SilentGhost
la source
69

Si vous avez affaire à de très grandes chaînes, en particulier des chaînes multilignes, tenez compte de la syntaxe des guillemets triples :

a = r"""This is a multiline string
with more than one line
in the source code."""
Greg Hewgill
la source
1
Cette construction introduit-elle des caractères de saut de ligne? Autrement dit, la variable acontiendra une chaîne avec deux caractères de saut de ligne?
MadPhysicist
7
@MadPhysicist: Oui, la chaîne résultante contiendra deux retours à la ligne dans le cas ci-dessus.
Greg Hewgill
Compris. Et si un 'split ()' est utilisé sur cette chaîne, sera-t-il divisé par lignes par défaut?
MadPhysicist
1
@MadPhysicist La valeur par défaut pour .split () est de diviser par des espaces et les retours à la ligne sont des espaces.
Greg Hewgill
1
Je l'ai déjà utilisé et cela fonctionne très bien. Deux choses à savoir: l'indentation (espaces) sur les autres lignes est incluse, ce qui est souhaitable; si la longue chaîne se termine sans "rien de bon, parce que tout se terminera par """" une erreur de syntaxe.
Nagev
9

Il n'y a pas une telle chose. Il semble que vous vouliez quelque chose comme "ici les documents" en Perl et les shells, mais Python ne l'a pas.

L'utilisation de chaînes brutes ou de chaînes multilignes signifie seulement qu'il y a moins de choses à craindre. Si vous utilisez une chaîne brute, vous devez toujours contourner un terminal "\" et avec toute solution de chaîne, vous devrez vous soucier de la fermeture de ", ',' '' ou" "" si elle est incluse dans vos données .

Autrement dit, il n'y a aucun moyen d'avoir la chaîne

 '   ''' """  " \

correctement stocké dans n'importe quelle chaîne littérale Python sans échappement interne d'aucune sorte.

Andrew Dalke
la source
1

(En supposant que vous n'êtes pas obligé de saisir la chaîne directement dans le code Python)

pour contourner le problème signalé par Andrew Dalke, tapez simplement la chaîne littérale dans un fichier texte, puis utilisez ceci;

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

print input_string

Cela imprimera le texte littéral de tout ce qui se trouve dans le fichier texte, même si c'est le cas;

 '   ''' """   \

Ce n'est ni amusant ni optimal, mais cela peut être utile, surtout si vous avez 3 pages de code qui auraient nécessité l'échappement de caractères.

Jeff Hykin
la source
-1

si string est une variable, utilisez le. méthode repr dessus:

>>> s = '\tgherkin\n'

>>> s
'\tgherkin\n'

>>> print(s)
    gherkin

>>> print(s.__repr__())
'\tgherkin\n'
marquage
la source
N'est-ce pas considéré comme un mauvais style, cependant?
shah.shah
quoi, des cornichons?
markling le
1
vous pouvez utiliser à la repr(s)place pour un meilleur style
xuiqzy