Wie schreibe ich String-Literale in Python, ohne ihnen entkommen zu müssen?

97

Gibt es eine Möglichkeit, eine Zeichenfolgenvariable in Python so zu deklarieren, dass alles in ihr automatisch maskiert wird oder ihren Literalzeichenwert hat?

Ich frage nicht , wie ich den Anführungszeichen mit Schrägstrichen entkommen kann, das ist offensichtlich. Was ich verlange, ist ein allgemeiner Weg, um alles in einem String-Literal zu machen, damit ich nicht manuell durchgehen und alles für sehr große Strings maskieren muss. Kennt jemand eine Lösung? Vielen Dank!

kjakeb
quelle

Antworten:

124

Rohe String-Literale:

>>> r'abc\dev\t'
'abc\\dev\\t'
SilentGhost
quelle
69

Wenn Sie mit sehr großen Zeichenfolgen arbeiten, insbesondere mit mehrzeiligen Zeichenfolgen, beachten Sie die dreifache Anführungszeichen- Syntax:

a = r"""This is a multiline string
with more than one line
in the source code."""
Greg Hewgill
quelle
1
Führt dieses Konstrukt Zeilenumbruchzeichen ein? Das heißt, die Variable aenthält eine Zeichenfolge mit zwei Zeilenumbruchzeichen?
MadPhysicist
7
@MadPhysicist: Ja, die resultierende Zeichenfolge enthält im obigen Fall zwei Zeilenumbrüche.
Greg Hewgill
Verstanden. Und wenn für diese Zeichenfolge ein 'split ()' verwendet wird, wird es standardmäßig nach Zeilen aufgeteilt?
MadPhysicist
1
@MadPhysicist Die Standardeinstellung für .split () ist die Aufteilung nach Leerzeichen, und Zeilenumbrüche sind Leerzeichen.
Greg Hewgill
1
Ich habe das schon einmal benutzt und es funktioniert gut. Zwei Dinge, die Sie beachten sollten: Einrückungen (Leerzeichen) in den anderen Zeilen sind enthalten, was wünschenswert ist; Wenn die lange Zeichenfolge ohne Erfolg beendet wird ", weil das Ganze """" einen Syntaxfehler ergibt.
Nagev
9

Es gibt keine solche Sache. Es sieht so aus, als ob Sie so etwas wie "hier Dokumente" in Perl und den Shells wollen, aber Python hat das nicht.

Die Verwendung von rohen oder mehrzeiligen Zeichenfolgen bedeutet nur, dass Sie sich weniger Sorgen machen müssen. Wenn Sie eine rohe Zeichenfolge verwenden, müssen Sie immer noch ein Terminal "\" umgehen, und bei jeder Zeichenfolgenlösung müssen Sie sich um das Schließen ", ',' '' oder" "" kümmern, wenn es in Ihren Daten enthalten ist .

Das heißt, es gibt keine Möglichkeit, die Zeichenfolge zu haben

 '   ''' """  " \

ordnungsgemäß in einem Python-String-Literal gespeichert, ohne dass ein internes Escapezeichen entsteht.

Andrew Dalke
quelle
1

(Angenommen, Sie müssen die Zeichenfolge nicht direkt aus Python-Code eingeben.)

Um das Problem zu umgehen, auf das Andrew Dalke hingewiesen hat, geben Sie einfach die Literalzeichenfolge in eine Textdatei ein und verwenden Sie diese.

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

print input_string

Dadurch wird der Literaltext von allem gedruckt, was sich in der Textdatei befindet, auch wenn dies der Fall ist.

 '   ''' """   \

Nicht lustig oder optimal, kann aber nützlich sein, insbesondere wenn Sie 3 Seiten Code haben, für die das Entkommen von Zeichen erforderlich gewesen wäre.

Jeff Hykin
quelle
-1

Wenn string eine Variable ist, verwenden Sie die. Repr- Methode darauf:

>>> s = '\tgherkin\n'

>>> s
'\tgherkin\n'

>>> print(s)
    gherkin

>>> print(s.__repr__())
'\tgherkin\n'
Markierung
quelle
Wird das nicht als schlechter Stil angesehen?
shah.shah
Was, Essiggurken?
Markierung
1
Sie können repr(s)stattdessen für besseren Stil verwenden
xuiqzy