Verwenden von Anführungszeichen in Anführungszeichen

72

Wenn ich einen printBefehl in Python ausführen möchte und Anführungszeichen verwenden muss, weiß ich nicht, wie ich dies tun soll, ohne die Zeichenfolge zu schließen.

Zum Beispiel:

print " "a word that needs quotation marks" "

Aber wenn ich versuche, das zu tun, was ich oben getan habe, schließe ich die Zeichenfolge und kann das benötigte Wort nicht zwischen Anführungszeichen setzen.

Wie kann ich das machen?

Thi G.
quelle

Antworten:

179

Sie können dies auf drei Arten tun:

  1. Verwenden Sie einfache und doppelte Anführungszeichen zusammen:
    print('"A word that needs quotation marks"')
    "A word that needs quotation marks"
  1. Entkomme den doppelten Anführungszeichen innerhalb der Zeichenfolge:
    print("\"A word that needs quotation marks\"")
    "A word that needs quotation marks" 
  1. Verwenden Sie Zeichenfolgen in dreifachen Anführungszeichen:
    print(""" "A word that needs quotation marks" """)
    "A word that needs quotation marks" 
Jamie Forrest
quelle
5
Das Escapezeichen aus doppelten Anführungszeichen funktioniert, aber die zusätzlichen Leerzeichen, die Sie eingegeben haben, sind jetzt Teil der Zeichenfolge. Sie können leicht behoben werden, indem Sie die Leerzeichen entfernen. Ähnlich verhält es sich mit dreifach zitierten Zeichenfolgen - die zusätzlichen Leerzeichen werden Teil der Zeichenfolge, und ich bin mir nicht sicher, wie ich das beheben soll, da das Setzen des inneren "neben das dreifache" einen Syntaxfehler verursacht
James Polley
3
Sie können den SyntaxError vermeiden, indem Sie einfache dreifache Anführungszeichen verwenden: '' '"ein Wort"' '', aber jetzt werden die Dinge albern.
DSM
1
Wenn Sie mehrere Wörter wie dieses haben, die Sie verketten möchten, würde ich diese Antwort verwenden . Es gibt auch eine Python 3.6-spezifische Antwort, die sehr gut lesbar ist.
Glarys
4)print('\'A word that needs quotation marks\'')
Barbaros Özhan
12

Du musst ihm entkommen. (Verwenden der Python 3-Druckfunktion):

>>> print("The boy said \"Hello!\" to the girl")
The boy said "Hello!" to the girl
>>> print('Her name\'s Jenny.')
Her name's Jenny.

Auf der Python-Seite finden Sie Zeichenfolgenliterale .

Jonathon Reinhart
quelle
4

Python akzeptiert sowohl "als auch 'als Anführungszeichen. Sie können dies also folgendermaßen tun:

>>> print '"A word that needs quotation marks"'
"A word that needs quotation marks"

Alternativ entkommen Sie einfach den inneren "s

>>> print "\"A word that needs quotation marks\""
"A word that needs quotation marks"
James Polley
quelle
4

Verwenden Sie das wörtliche Escape-Zeichen \

print("Here is, \"a quote\"")

Der Charakter bedeutet im Grunde , den semantischen Kontext meines nächsten Charakters zu ignorieren und ihn im wörtlichen Sinne zu behandeln .

Droogans
quelle
1

Ein Fall, der in Duplikaten häufig vorkommt, ist die Anforderung, Anführungszeichen für externe Prozesse zu verwenden. Eine Problemumgehung besteht darin, keine Shell zu verwenden, wodurch die Notwendigkeit einer Angebotsebene entfällt.

os.system("""awk '/foo/ { print "bar" }' %""" % filename)

kann sinnvollerweise durch ersetzt werden

subprocess.call(['awk', '/foo/ { print "bar" }', filename])

(Dies behebt auch den Fehler, in dem sich Metazeichen befinden filename müssen, was der ursprüngliche Code nicht konnte. Ohne Shell ist dies jedoch nicht erforderlich.)

Natürlich möchten oder brauchen Sie in den allermeisten Fällen überhaupt keinen externen Prozess.

with open(filename) as fh:
    for line in fh:
        if 'foo' in line:
            print("bar")
Tripleee
quelle
1

Wenn Sie mehrere Wörter wie dieses haben, die Sie in einer Zeichenfolge verketten möchten, empfehle ich die Verwendung formatoder f-stringsdie Lesbarkeit erheblich verbessern (meiner Meinung nach).

Um ein Beispiel zu geben:

s = "a word that needs quotation marks"
s2 = "another word"

Jetzt können Sie tun

print('"{}" and "{}"'.format(s, s2))

welches drucken wird

"a word that needs quotation marks" and "another word"

Ab Python 3.6 können Sie Folgendes verwenden:

print(f'"{s}" and "{s2}"')

die gleiche Ausgabe ergeben.

Cleb
quelle
0

in Python 3.2.2 unter Windows

print(""""A word that needs quotation marks" """) 

ist in Ordnung. Ich denke, es ist die Verbesserung des Python-Interpretors.

AnthonyDouSole
quelle
0

Sie können auch versuchen, Zeichenfolgen hinzuzufügen: print " "+'"'+'a word that needs quotation marks'+'"'

whackamadoodle3000
quelle
0

Ich bin überrascht, dass noch niemand das explizite Conversion-Flag erwähnt hat

>>> print('{!r}'.format('a word that needs quotation marks'))
'a word that needs quotation marks'

Das Flag !rist eine Abkürzung der repr()eingebauten Funktion 1 . Es wird verwendet, um die Objektdarstellung object.__repr__()anstelle von zu drucken object.__str__().

Es gibt jedoch eine interessante Nebenwirkung :

>>> print("{!r} \t {!r} \t {!r} \t {!r}".format("Buzz'", 'Buzz"', "Buzz", 'Buzz'))
"Buzz'"      'Buzz"'     'Buzz'      'Buzz'

Beachten Sie, wie unterschiedliche Zusammensetzungen von Anführungszeichen unterschiedlich behandelt werden, damit sie zu einer gültigen Zeichenfolgendarstellung eines Python-Objekts 2 passen .


1 Korrigieren Sie mich, wenn jemand etwas anderes weiß.

2 Das ursprüngliche Beispiel der Frage " "word" "ist keine gültige Darstellung in Python

Leonardus Chen
quelle
0

Dies hat bei mir in IDLE Python 3.8.2 funktioniert

print('''"A word with quotation marks"''')

Dreifache einfache Anführungszeichen scheinen es Ihnen zu ermöglichen, Ihre doppelten Anführungszeichen als Teil der Zeichenfolge einzuschließen.

Dalhax
quelle