Python >> Python Tutorial >  >> Python

Wie schreibt man mehrere Strings in eine Zeile?

target.write(line1 \n, line2 \n, line3 \n)

'\n' macht nur innerhalb eines String-Literals Sinn. Ohne die Anführungszeichen haben Sie keine String-Literale.

target.write('line1 \n, line2 \n, line3 \n')

Ok, jetzt ist alles ein String-Literal. Aber Sie möchten, dass line1, line2, line3 keine String-Literale sind. Sie benötigen diese als Python-Ausdrücke, um auf die betreffenden Variablen zu verweisen. Grundsätzlich müssen Sie Strings in Anführungszeichen setzen, die eigentlich Text wie "\n" sind, aber nicht um Variablen. Wenn Sie das getan haben, haben Sie möglicherweise Folgendes erhalten:

target.write(line1 '\n' line2 '\n' line3 '\n')

Was ist 2 2 ? Es ist nichts. Sie müssen Python angeben, wie die beiden Teile kombiniert werden sollen. Sie können also 2 + 2 haben oder 2 * 2 aber 2 2 macht keinen Sinn. In diesem Fall verwenden wir add, um zwei Zeichenfolgen zu kombinieren

target.write(line + '\n' + line2 + '\n' + line3 + '\n')

Weiter geht's,

target.write(%r \n, %r \n, %r \n) % (line1, line2, line3)

Wieder \n macht nur innerhalb eines String-Literals Sinn. Der %-Operator, wenn er zum Erzeugen von Strings verwendet wird, nimmt einen String als linke Seite. Sie brauchen also all diese Formatierungsdetails in einem String.

target.write('%r \n', '%r \n', '%r \n') % (line1, line2, line3)

Aber das erzeugt 3 String-Literale, Sie wollen nur eines. Wenn Sie dies getan haben, schreiben Sie beschwert, weil es eine Zeichenfolge ausnimmt, nicht 3. Sie haben also vielleicht etwas versucht wie:

target.write('%r \n%r \n%r \n') % (line1, line2, line3)

Aber Sie wollen line1, line2, line3 in die Datei schreiben. In diesem Fall versuchen Sie die Formatierung, nachdem der Schreibvorgang bereits abgeschlossen ist. Wenn Python dies ausführt, führt es zuerst target.write aus und hinterlässt:

None % (line1, line2, line3)

Was nichts Nützliches tun wird. Um das zu beheben, müssen wir den % () setzen innerhalb der .write()

target.write('%r\n%r\n%r\n' % (line1, line2, line3))

Dein letzter Versuch sieht vielversprechend aus. Es sollte so aussehen:

"%s \n %s \n %s" % (line1, line2, line3)

dies gilt für den Operator % zu einem String (mit 3 %s Platzhalter) und ein Tupel von zu ersetzenden Werten (hier Strings). Das Ergebnis ist der formatierte String.

Sie müssten das also in die Funktion einschließen, die das Ergebnis übernimmt:

target.write("%s \n %s \n %s" % (line1, line2, line3) )

Hier ist eine Möglichkeit:

target.write(line1 + '\n' + line2 + '\n' + line3 + '\n')

Der Grund, warum Folgendes nicht funktioniert

target.write(line1 \n, line2 \n, line3 \n)

Ist das line1 ist eine Variable (beachten Sie, dass sie nicht in Anführungszeichen steht), sondern '\n' ist ein Zeichenfolgenliteral (da es in Anführungszeichen steht). Der Additionsoperator ist für Strings überladen, um sie zu verketten (kombinieren).

Der Grund, warum dies nicht funktioniert:

target.write('line1 \n, line2 \n, line3 \n')

Ist weil line1 ist eine Variable. Wenn Sie es in Anführungszeichen setzen, wird es nicht mehr als Variable behandelt.