2421 Stimmen

Wie drucke ich ohne Zeilenumbruch oder Leerzeichen?

Beispiel in C:

for (int i = 0; i < 4; i++)
    printf(".");

出力します。

....

In Python:

>>> for i in range(4): print('.')
.
.
.
.
>>> print('.', '.', '.', '.')
. . . .

In Python, print wird eine \n oder Raum. Wie kann ich das vermeiden? Ich würde gerne wissen, wie man Zeichenketten "anhängen" kann stdout .

8 Stimmen

Für diejenigen, die die Dokumentation zur String-Formatierung von Python durchsuchen: docs.python.org/library/stdtypes.html#string-formatting

1 Stimmen

Es sieht so aus, als ob eine ähnliche Frage schon einmal gestellt worden wäre: https://stackoverflow.com/q/255147/9325817

1 Stimmen

Etwas spät zur Party, aber warum nicht print("." * 10) ?

3278voto

codelogic Punkte 68703

In Python 3 können Sie die sep= y end= Parameter des print Funktion:

Um keinen Zeilenumbruch am Ende der Zeichenkette hinzuzufügen:

print('.', end='')

So fügen Sie kein Leerzeichen zwischen alle Funktionsargumente ein, die Sie ausdrucken möchten:

print('a', 'b', 'c', sep='')

Sie können eine beliebige Zeichenkette an einen der beiden Parameter übergeben und beide Parameter gleichzeitig verwenden.

Wenn Sie Probleme mit der Pufferung haben, können Sie die Ausgabe spülen, indem Sie flush=True Schlüsselwort-Argument:

print('.', end='', flush=True)

Python 2.6 und 2.7

Ab Python 2.6 können Sie entweder die print Funktion von Python 3 unter Verwendung der __future__ Modul :

from __future__ import print_function

die es Ihnen ermöglicht, die obige Python-3-Lösung zu verwenden.

Es ist jedoch zu beachten, dass die flush ist nicht verfügbar in der Version des print Funktion importiert aus __future__ in Python 2; es funktioniert nur in Python 3, genauer gesagt 3.3 und später. In früheren Versionen müssen Sie den Flush immer noch manuell mit einem Aufruf von sys.stdout.flush() . Sie müssen auch alle anderen Druckanweisungen in der Datei, in die Sie diesen Import durchführen, neu schreiben.

Oder Sie können verwenden sys.stdout.write()

import sys
sys.stdout.write('.')

Möglicherweise müssen Sie auch anrufen

sys.stdout.flush()

um sicherzustellen stdout wird sofort gespült.

12 Stimmen

Danke! In Python 3.6.3, dass flush=True ist entscheidend, sonst funktioniert es nicht wie vorgesehen.

8 Stimmen

Kann mir jemand erklären, warum ich das tun muss? flush und was macht es eigentlich?

11 Stimmen

Es ist ein paar Monate zu spät, aber um @Rishav zu antworten, leert flush den Puffer und zeigt die Ausgabe sofort an. Ohne flush wird der exakte Text vielleicht irgendwann gedruckt, aber erst dann, wenn das System dazu kommt, die Grafiken statt der IO zu verarbeiten. Flush macht den Text sofort sichtbar, indem der Cache "geleert" wird.

303voto

KDP Punkte 3525

Für Python 2 und früher sollte es so einfach sein wie in Re: Wie kann man ohne CR drucken? von Guido van Rossum (paraphrasiert):

Ist es möglich, etwas zu drucken, aber nicht automatisch eine Wagenrücklauf angehängt wird?

Ja, fügen Sie ein Komma nach dem letzten zu druckenden Argument an. In dieser Schleife werden zum Beispiel die Zahlen 0..9 auf einer durch Leerzeichen getrennten Zeile ausgegeben. Beachten Sie das parameterlose "print", das den letzten Zeilenumbruch hinzufügt:

>>> for i in range(10):
...     print i,
... else:
...     print
...
0 1 2 3 4 5 6 7 8 9
>>>

110 Stimmen

Dies wird in der Frage ausdrücklich als unerwünschtes Verhalten aufgeführt, weil die Leerzeichen

97 Stimmen

Im Gegenteil, die Antwort sollte aus zwei Gründen gelöscht werden: Sie hat unerwünschte Nebeneffekte, die man nicht abschalten kann (zusätzliche Leerzeichen), und sie ist nicht vorwärtskompatibel mit Python 3 (die Klammern erzwingen eine Umwandlung in ein Tupel). Solche schlampigen Konstrukte erwarte ich von PHP, nicht von Python. Es ist also am besten, dies nie zu verwenden.

11 Stimmen

// Dies ist allerdings der einfachste Weg, dies in Python 2 zu erreichen, und es gibt eine Menge einmaligen Code für wirklich alte Betriebssysteme. Wahrscheinlich ist das nicht die beste Lösung, und es wird auch nicht empfohlen. Einer der großen Vorteile von StackOverflow ist jedoch, dass man dort erfährt, welche verrückten Tricks es da draußen gibt. KDP, könnten Sie oben eine kurze Warnung zu dem einfügen, was @Eric Leschinski gesagt hat? Immerhin macht es ja Sinn.

179voto

Beau Punkte 10809

Hinweis: Der Titel dieser Frage lautete früher etwa "How to printf in Python".

Da die Leute aufgrund des Titels hierher kommen könnten, unterstützt Python auch die Ersetzung im Stil von printf:

>>> strings = [ "one", "two", "three" ]
>>>
>>> for i in xrange(3):
...     print "Item %d: %s" % (i, strings[i])
...
Item 0: one
Item 1: two
Item 2: three

Außerdem können Sie Zeichenkettenwerte einfach multiplizieren:

>>> print "." * 10
..........

11 Stimmen

In der Tat geht das am Thema vorbei :) Da es bereits eine gute Antwort auf die Frage gab, habe ich nur einige verwandte Techniken erläutert, die sich als nützlich erweisen könnten.

8 Stimmen

Aufgrund des Titels der Frage halte ich diese Antwort für angemessener, analog dazu, wie man printf in C/C++ üblicherweise verwendet

17 Stimmen

Dies beantwortet den Titel der Frage, aber nicht den Hauptteil. Trotzdem habe ich damit gefunden, wonach ich gesucht habe :)

100voto

k107 Punkte 14873

Verwenden Sie die Druckfunktion im Stil von Python 3 für Python 2.6+ (dadurch werden auch alle vorhandenen Druckanweisungen mit Schlüsselwörtern in derselben Datei unterbrochen) .

# For Python 2 to use the print() function, removing the print keyword
from __future__ import print_function
for x in xrange(10):
    print('.', end='')

Um nicht alle Ihre Python 2-Schlüsselwörter zu ruinieren, erstellen Sie eine separate printf.py Datei:

# printf.py

from __future__ import print_function

def printf(str, *args):
    print(str % args, end='')

Verwenden Sie sie dann in Ihrer Datei:

from printf import printf
for x in xrange(10):
    printf('.')
print 'done'
#..........done

Weitere Beispiele für den printf-Stil:

printf('hello %s', 'world')
printf('%i %f', 10, 3.14)
#hello world10 3.140000

48voto

lenooh Punkte 9602

So drucken Sie auf derselben Zeile:

import sys
for i in xrange(0,10):
   sys.stdout.write(".")
   sys.stdout.flush()

0 Stimmen

Echtzeitausgabe des Status und immer noch relevant 10+ Jahre später in Python 3 !

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X