Die Frage steht im Titel.
Ich würde es gerne in Python machen. Was ich in diesem Beispiel gerne machen würde in c :
In C:
#include <stdio.h>
int main() {
int i;
for (i=0; i<10; i++) printf(".");
return 0;
}
Ausgabe:
..........
In Python:
>>> for i in xrange(0,10): print '.'
.
.
.
.
.
.
.
.
.
.
>>> for i in xrange(0,10): print '.',
. . . . . . . . . .
In Python print
wird ein \n
oder ein Leerzeichen hinzugefügt. Wie kann ich das vermeiden? Nun ist es nur ein Beispiel. Sag mir nicht, dass ich erst einen String bauen und dann ausdrucken kann. Ich möchte wissen, wie ich Zeichenfolgen an stdout
"anhängen" kann.
import sys
sys.stdout.write('.')
Möglicherweise müssen Sie auch anrufen
sys.stdout.flush()
um sicherzustellen, dass stdout
sofort gespült wird.
Aus Python 2.6 können Sie die print
-Funktion aus Python 3 importieren:
from __future__ import print_function
Auf diese Weise können Sie die unten stehende Python 3-Lösung verwenden.
In Python 3 wurde die Anweisung print
in eine Funktion geändert. In Python 3 können Sie stattdessen Folgendes tun:
print('.', end='')
Dies funktioniert auch in Python 2, sofern Sie from __future__ import print_function
verwendet haben.
Wenn Sie Probleme beim Puffern haben, können Sie die Ausgabe leeren, indem Sie das Schlüsselwort flush=True
hinzufügen:
print('.', end='', flush=True)
Beachten Sie jedoch, dass das Schlüsselwort flush
in der Version der Funktion print
, die aus __future__
in Python 2 importiert wurde, nicht verfügbar ist. Es funktioniert nur in Python 3, genauer gesagt in 3.3 und höher. In früheren Versionen müssen Sie noch manuell mit einem Aufruf von sys.stdout.flush()
spülen.
Es sollte so einfach sein wie unter diesem Link von Guido Van Rossum beschrieben:
Betreff: Wie druckt man ohne c/r?
http://legacy.python.org/search/hypermail/python-1992/0115.html
Ist es möglich, etwas zu drucken, ohne dass automatisch ein Wagenrücklauf angehängt wird?
Ja, fügen Sie nach dem letzten zu druckenden Argument ein Komma an. Diese Schleife gibt beispielsweise die Zahlen 0..9 in einer durch Leerzeichen getrennten Zeile aus. Beachten Sie den parameterlosen "print", der die letzte neue Zeile hinzufügt:
>>> for i in range(10):
... print i,
... else:
... print
...
0 1 2 3 4 5 6 7 8 9
>>>
Hinweis: Der Titel dieser Frage lautete früher etwa "Wie drucke ich in Python?"
Da die Leute hierher kommen können, um nach dem Titel zu suchen, unterstützt Python auch die Ersetzung im Printf-Stil:
>>> 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
Und Sie können Zeichenfolgenwerte auf einfache Weise multiplizieren:
>>> print "." * 10
..........
Verwenden Sie die Druckfunktion im Python3-Stil für Python2.6 + (unterbricht auch alle vorhandenen Druckanweisungen mit Schlüsselwörtern in derselben Datei.
# for python2 to use the print() function, removing the print keyword
from __future__ import print_function
for x in xrange(10):
print('.', end='')
Erstellen Sie eine separate printf.py
-Datei, um nicht alle Ihre python2-Druckschlüsselwörter zu ruinieren
# printf.py
from __future__ import print_function
def printf(str, *args):
print(str % args, end='')
Verwenden Sie es dann in Ihrer Datei
from printf import printf
for x in xrange(10):
printf('.')
print 'done'
#..........done
Weitere Beispiele für den Druckstil
printf('hello %s', 'world')
printf('%i %f', 10, 3.14)
#hello world10 3.140000
So drucken Sie in derselben Zeile:
import sys
for i in xrange(0,10):
sys.stdout.write(".")
sys.stdout.flush()
Die neue (ab Python 3.0) print
-Funktion verfügt über einen optionalen end
-Parameter, mit dem Sie das Endzeichen ändern können. Es gibt auch sep
für Trennzeichen.
Mit functools.partial eine neue Funktion namens printf erstellen
>>> import functools
>>> printf = functools.partial(print, end="")
>>> printf("Hello world\n")
Hello world
Einfache Möglichkeit, eine Funktion mit Standardparametern zu verpacken.
Sie können einfach ,
am Ende der print
-Funktion hinzufügen, damit nicht in einer neuen Zeile gedruckt wird.
print
Funktion in python generiert automatisch eine neue Zeile. Du könntest es versuchen:
print("Hello World", end="")
Sie können dies mit dem Argument end
von print
tun. In Python3 gibt range()
einen Iterator zurück und xrange()
existiert nicht.
for i in range(10): print('.', end='')
Code für Python 3.6.1
for i in range(0,10): print('.' , end="")
Ausgabe
..........
>>>
Du kannst es versuchen:
import sys
import time
# Keeps the initial message in buffer.
sys.stdout.write("\rfoobar bar black sheep")
sys.stdout.flush()
# Wait 2 seconds
time.sleep(2)
# Replace the message with a new one.
sys.stdout.write("\r"+'hahahahaaa ')
sys.stdout.flush()
# Finalize the new message by printing a return carriage.
sys.stdout.write('\n')
In Python 3 ist Drucken eine Funktion. Wenn du anrufst
print ('hello world')
Python übersetzt es in
print ('hello world', end = '\n')
Sie können das Ende nach Belieben ändern.
print ('hello world', end = '')
print ('hello world', end = ' ')
python 2.6 +:
from __future__ import print_function # needs to be first statement in file
print('.', end='')
python :
print('.', end='')
python <= 2.5:
import sys
sys.stdout.write('.')
wenn nach jedem Druck zusätzlicher Speicherplatz in Ordnung ist, in python 2
print '.',
irreführend in python 2 - vermeiden:
print('.'), # avoid this if you want to remain sane
# this makes it look like print is a function but it is not
# this is the `,` creating a Tuple and the parentheses enclose an expression
# to see the problem, try:
print('.', 'x'), # this will print `('.', 'x') `
ich hatte vor kurzem das gleiche Problem ..
ich habe es gelöst, indem ich:
import sys, os
# reopen stdout with "newline=None".
# in this mode,
# input: accepts any newline character, outputs as '\n'
# output: '\n' converts to os.linesep
sys.stdout = os.fdopen(sys.stdout.fileno(), "w", newline=None)
for i in range(1,10):
print(i)
dies funktioniert sowohl unter Unix als auch unter Windows ... habe es nicht unter MacOSX getestet ...
hth
Sie werden feststellen, dass alle obigen Antworten korrekt sind. Aber ich wollte eine Abkürzung machen, um am Ende immer den Parameter "end = ''" zu schreiben.
Sie könnten eine Funktion wie definieren
def Print(*args,sep='',end='',file=None,flush=False):
print(*args,sep=sep,end=end,file=file,flush=flush)
Es würde die gesamte Anzahl von Parametern akzeptieren. Auch werden alle anderen Parameter wie file, flush usw. mit demselben Namen akzeptiert.
Sie können dasselbe in python3 wie folgt tun:
#!usr/bin/python
i = 0
while i<10 :
print('.',end='')
i = i+1
und mit python filename.py
oder python3 filename.py
ausführen
for i in xrange(0,10): print '.',
Dies wird für Sie arbeiten. Hier ist nach dem Drucken ein Komma (,) wichtig. Habe Hilfe von: http://freecodeszone.blogspot.in/2016/11/how-to-print-in-python-without-newline.html
Viele dieser Antworten scheinen etwas kompliziert zu sein. In Python 3.X tun Sie dies einfach,
print(<expr>, <expr>, ..., <expr>, end=" ")
Der Standardwert für end ist "\ n". Wir ändern es einfach in ein Leerzeichen oder Sie können auch end = "" verwenden.
@lenooh hat meine Anfrage erfüllt. Ich habe diesen Artikel bei der Suche nach 'python suppress newline' entdeckt. Ich verwende IDLE3 auf Raspberry Pi, um Python 3.2 für PuTTY zu entwickeln. Ich wollte einen Fortschrittsbalken in der PuTTY-Befehlszeile erstellen. Ich wollte nicht, dass die Seite wegscrollt. Ich wollte eine horizontale Linie, um den Benutzer davor zu bewahren, auszurasten, dass das Programm nicht zum Stillstand gekommen ist oder in einer lustigen Endlosschleife zum Mittagessen geschickt wurde - als Aufforderung, mich zu verlassen, geht es mir gut. aber das kann einige Zeit dauern. ' interaktive Nachricht - wie ein Fortschrittsbalken im Text.
Die print('Skimming for', search_string, '\b! .001', end='')
initialisiert die Nachricht, indem sie sich auf den nächsten Bildschirmschreibvorgang vorbereitet, bei dem drei Leerzeichen als as Rubout und dann ein Punkt gedruckt werden, wobei '001' gelöscht und die Zeile der Punkte erweitert wird. Nachdem der Benutzer search_string
Papageien eingegeben hat, schneidet der \b!
das Ausrufezeichen meines search_string
Textes ab, um über das Leerzeichen zu springen, das print()
andernfalls zwingt, die Interpunktion ordnungsgemäß zu platzieren. Darauf folgt ein Leerzeichen und der erste 'Punkt' der 'Fortschrittsleiste', die ich simuliere. Unnötigerweise wird die Nachricht dann auch mit der Seitenzahl versehen (auf eine Länge von drei mit führenden Nullen formatiert), um den Benutzer darauf aufmerksam zu machen, dass der Fortschritt verarbeitet wird und die Anzahl der Zeiträume wiedergibt, die wir später für die Nachricht erstellen werden richtig.
import sys
page=1
search_string=input('Search for?',)
print('Skimming for', search_string, '\b! .001', end='')
sys.stdout.flush() # the print function with an end='' won't print unless forced
while page:
# some stuff…
# search, scrub, and build bulk output list[], count items,
# set done flag True
page=page+1 #done flag set in 'some_stuff'
sys.stdout.write('\b\b\b.'+format(page, '03')) #<-- here's the progress bar meat
sys.stdout.flush()
if done: #( flag alternative to break, exit or quit)
print('\nSorting', item_count, 'items')
page=0 # exits the 'while page' loop
list.sort()
for item_count in range(0, items)
print(list[item_count])
#print footers here
if not (len(list)==items):
print('#error_handler')
Der Fortschrittsbalken Fleisch ist in der Zeile sys.stdout.write('\b\b\b.'+format(page, '03'))
. Zum Löschen nach links wird zunächst der Cursor über den drei numerischen Zeichen mit dem "\ b\b\b" als "Rubout" gesichert und eine neue Periode abgelegt, um die Länge des Fortschrittsbalkens zu erhöhen. Dann schreibt es drei Ziffern der Seite, zu der es bis jetzt fortgeschritten ist. Da sys.stdout.write()
auf das Schließen eines vollständigen Puffers oder des Ausgabekanals wartet, erzwingt die sys.stdout.flush()
das sofortige Schreiben. sys.stdout.flush()
ist in das Ende von print()
integriert, das mit print(txt, end='' )
umgangen wird. Dann durchläuft der Code seine alltäglichen zeitintensiven Operationen, während er nichts mehr druckt, bis er hierher zurückkehrt, um drei Stellen zurück zu wischen, einen Punkt hinzuzufügen und drei Stellen erneut zu schreiben, inkrementiert.
Das Löschen und Umschreiben der drei Ziffern ist keineswegs erforderlich. Es handelt sich lediglich um ein Musterbeispiel für sys.stdout.write()
im Vergleich zu print()
. Sie können genauso einfach mit einem Punkt beginnen und die drei ausgefallenen Backslash-B b-Backspaces vergessen (natürlich auch nicht formatierte Seitenzahlen), indem Sie den Punktbalken jedes Mal um eins länger durchdrücken - ohne Leerzeichen oder Zeilenumbrüche sys.stdout.write('.'); sys.stdout.flush()
Paar.
Bitte beachten Sie, dass die Raspberry Pi IDLE3 Python Shell das Backspace nicht als as Rubout erkennt, sondern stattdessen ein Leerzeichen ausgibt und stattdessen eine scheinbare Liste von Brüchen erstellt.
- (o = 8> wiz
sie möchten etwas in der richtigen for-Schleife drucken, aber nicht jedes Mal in einer neuen Zeile. Zum Beispiel:
for i in range (0,5):
print "hi"
OUTPUT:
hi
hi
hi
hi
hi
aber du willst es so drucken: hi hi hi hi hi hi richtig ???? füge einfach ein Komma nach dem Druck "hi" hinzu
Beispiel:
for i in range (0,5): print "hi", OUTPUT: hi hi hi hi hi
for i in xrange(0,10): print '\b.',
Dies funktionierte sowohl in 2.7.8 als auch in 2.5.2 (Canopy bzw. OSX-Terminal) - kein Modulimport oder Zeitreisen erforderlich.
Oder haben Sie eine Funktion wie:
def Print(s):
return sys.stdout.write(str(s))
Dann jetzt:
for i in range(10): # or `xrange` for python 2 version
Print(i)
Ausgänge:
0123456789
Hier ist eine allgemeine Methode zum Drucken ohne Einfügen einer neuen Zeile.
Python
for i in range(10):
print('.',end = '')
In Python 3 ist es sehr einfach zu implementieren