wake-up-neo.net

Wie drucke ich ohne Zeilenumbruch oder Leerzeichen?

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.

1697
Andrea Ambu

Allgemeiner Weg

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

Möglicherweise müssen Sie auch anrufen

sys.stdout.flush()

um sicherzustellen, dass stdout sofort gespült wird.

Python 2.6+

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.

Python 3

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.

Quellen

  1. https://docs.python.org/2/library/functions.html#print
  2. https://docs.python.org/2/library/__future__.html
  3. https://docs.python.org/3/library/functions.html#print
2317
codelogic

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
>>> 
292
KDP

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
..........
165
Beau

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
91
k107

So drucken Sie in derselben Zeile:

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

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.

26
SilentGhost

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.

20
sohail288

Sie können einfach , am Ende der print -Funktion hinzufügen, damit nicht in einer neuen Zeile gedruckt wird.

17
user3763437

print Funktion in python generiert automatisch eine neue Zeile. Du könntest es versuchen:

print("Hello World", end="")

15
klee8_

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='')
14
Maxim

Code für Python 3.6.1

for i in range(0,10): print('.' , end="")

Ausgabe

..........
>>>
11
Jasmohan

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')
8
alvas

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 = ' ')
8
Yaelle

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') `
7
n611x007

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

6
ssgam

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.

5
Bikram Kumar

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

5
Subbu
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

4
Shekhar

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.

4
jarr

@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

4
DisneyWizard

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

4
Bala.K
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.

2
tyersome

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
2
U10-Forward

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

1