Me gustaría hacerlo en . Lo que me gustaría hacer en este ejemplo en :

Cía:

#include <stdio.h>

int main() {
    int i;
    for (i=0; i<10; i++) printf(".");
    return 0;
}

Salida:

..........

En Python:

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

En Python print agregará un \n o espacio, ¿cómo puedo evitar eso? Ahora, es solo un ejemplo, no me digas que primero puedo construir una cadena y luego imprimirla. Me gustaría saber cómo "agregar" cadenas a stdout.

1815
Andrea Ambu 29 ene. 2009 a las 23:58

20 respuestas

La mejor respuesta

En Python 3, puede usar los parámetros sep= y end= de los Función print:

Para no agregar una nueva línea al final de la cadena:

print('.', end='')

Para no agregar un espacio entre todos los argumentos de la función que desea imprimir:

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

Puede pasar cualquier cadena a cualquiera de los parámetros, y puede usar ambos parámetros al mismo tiempo.

Si tiene problemas con el almacenamiento en búfer, puede vaciar el resultado agregando el argumento de palabra clave flush=True:

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

Python 2.6 y 2.7

Desde Python 2.6 puede importar la función print desde Python 3 utilizando {{ X1}} módulo:

from __future__ import print_function

Que le permite usar la solución Python 3 anterior.

Sin embargo, tenga en cuenta que la palabra clave flush no está disponible en la versión de la función print importada de __future__ en Python 2; solo funciona en Python 3, más específicamente 3.3 y versiones posteriores. En versiones anteriores, aún deberá descargar manualmente con una llamada a sys.stdout.flush(). También tendrá que volver a escribir todas las demás declaraciones de impresión en el archivo donde realiza esta importación.

O puede usar sys.stdout.write()

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

También puede necesitar llamar

sys.stdout.flush()

Para garantizar que stdout se vacíe de inmediato.

2457
Boris 1 ene. 2020 a las 21:42

Nota: El título de esta pregunta solía ser algo así como "¿Cómo imprimir en Python?"

Dado que la gente puede venir a buscarlo en función del título, Python también admite la sustitución de estilo 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

Y puede multiplicar fácilmente los valores de cadena:

>>> print "." * 10
..........
165
Beau 20 dic. 2012 a las 19:02

Puedes probar:

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 23 nov. 2015 a las 12:03

... no necesita importar ninguna biblioteca. Solo usa el caracter de borrar:

BS=u'\0008' # the unicode for "delete" character
for i in range(10):print(BS+"."),

Esto elimina la nueva línea y el espacio (^ _ ^) *

-3
mchrgr2000 17 may. 2017 a las 04:50

Use la función de impresión de estilo python3 para python2.6 + (también romperá las declaraciones de impresión con palabras clave existentes en el mismo archivo).

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

Para no arruinar todas sus palabras clave de impresión python2, cree un archivo printf.py separado

# printf.py

from __future__ import print_function

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

Luego, úsalo en tu archivo

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

Más ejemplos que muestran el estilo printf

printf('hello %s', 'world')
printf('%i %f', 10, 3.14)
#hello world10 3.140000
90
Chris F Carroll 28 abr. 2014 a las 07:33

Usando functools.partial para crear una nueva función llamada printf

>>> import functools

>>> printf = functools.partial(print, end="")

>>> printf("Hello world\n")
Hello world

Manera fácil de ajustar una función con parámetros predeterminados.

21
sohail288 17 jun. 2015 a las 01:55

Debería ser tan simple como se describe en este enlace por Guido Van Rossum:

Re: ¿Cómo se imprime sin una c / r?

http://legacy.python.org/search/hypermail/python-1992/0115.html

¿Es posible imprimir algo pero no se adjunta automáticamente un retorno de carro?

Sí, agregue una coma después del último argumento para imprimir. Por ejemplo, este bucle imprime los números 0..9 en una línea separada por espacios. Tenga en cuenta la "impresión" sin parámetros que agrega la nueva línea final:

>>> for i in range(10):
...     print i,
... else:
...     print
...
0 1 2 3 4 5 6 7 8 9
>>> 
295
Andrew Domaszek 9 ene. 2018 a las 01:04

O tener una función como:

def Print(s):
   return sys.stdout.write(str(s))

Entonces ahora:

for i in range(10): # or `xrange` for python 2 version
   Print(i)

Salidas:

0123456789
1
U10-Forward 17 oct. 2018 a las 01:41

Puede hacer lo mismo en python3 de la siguiente manera:

#!usr/bin/python

i = 0
while i<10 :
    print('.',end='')
    i = i+1

Y ejecutarlo con python filename.py o python3 filename.py

5
Subbu 5 jul. 2013 a las 17:37

La nueva función (a partir de Python 3.0) print tiene un parámetro opcional end que le permite modificar el carácter final. También hay sep para el separador.

26
J...S 12 feb. 2018 a las 14:01

Cómo imprimir en la misma línea:

import sys
for i in xrange(0,10):
   sys.stdout.write(".")
   sys.stdout.flush()
38
lenooh 15 jul. 2019 a las 11:29

Puede agregar , al final de la función print para que no se imprima en una nueva línea.

16
user3763437 10 jul. 2014 a las 19:45

Recientemente tuve el mismo problema..

Lo resolví haciendo:

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)

Esto funciona tanto en Unix como en Windows ... no lo he probado en macosx ...

Hth

5
Solomon Ucko 17 abr. 2016 a las 19:59

Hay dos formas generales de hacer esto:

Imprimir sin nueva línea en Python 3.x

No agregue nada después de la declaración de impresión y elimine '\ n' usando end='' como:

>>> print('hello')
hello  # appending '\n' automatically
>>> print('world')
world # with previous '\n' world comes down

# solution is:
>>> print('hello', end='');print(' world'); # end with anything like end='-' or end=" " but not '\n'
hello world # it seem correct output

Otro ejemplo en bucle :

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

Imprimir sin nueva línea en Python 2.x

Agregar una coma final dice que después de imprimir ignore \n.

>>> print "hello",; print" world"
hello world

Otro ejemplo en bucle :

for i in range(1,10):
    print "{} .".format(i),

Espero que esto te ayudará. Puede visitar este enlace.

0
susan097 4 dic. 2018 a las 07:49

En Python 3+, print es una función. Cuando usted llama

print('hello world')

Python lo traduce a

print('hello world', end='\n')

Puedes cambiar end a lo que quieras.

print('hello world', end='')
print('hello world', end=' ')
11
Boris 24 nov. 2019 a las 02:43

Desea imprimir algo en el bucle correcto, pero no desea que se imprima en una nueva línea cada vez ... por ejemplo:

 for i in range (0,5):
   print "hi"

 OUTPUT:
    hi
    hi
    hi
    hi
    hi

Pero quieres que se imprima de esta manera: hola hola hola hola hola ¿verdad ???? simplemente agregue una coma después de imprimir "hola"

Ejemplo:

for i in range (0,5): print "hi", OUTPUT: hi hi hi hi hi

3
gd1 7 ago. 2015 a las 12:12
for i in xrange(0,10): print '\b.',

Esto funcionó tanto en 2.7.8 como en 2.5.2 (Canopy y terminal OSX, respectivamente): no se requieren importaciones de módulos ni viajes en el tiempo.

1
tyersome 18 dic. 2016 a las 21:13

Notará que todas las respuestas anteriores son correctas. Pero quería hacer un atajo para escribir siempre el parámetro "end = ''" al final.

Podrías definir una función como

def Print(*args,sep='',end='',file=None,flush=False):
    print(*args,sep=sep,end=end,file=file,flush=flush)

Aceptaría toda la cantidad de parámetros. Incluso aceptará todos los demás parámetros como archivo, vaciado, etc. y con el mismo nombre.

4
Bikram Kumar 9 mar. 2017 a las 05:54

Muchas de estas respuestas parecen un poco complicadas. En Python 3.X simplemente haces esto,

print(<expr>, <expr>, ..., <expr>, end=" ")

El valor predeterminado de end es "\ n". Simplemente lo estamos cambiando a un espacio o también puede usar end = "".

4
jarr 24 nov. 2015 a las 18:46

@lenooh satisfizo mi consulta. Descubrí este artículo mientras buscaba 'python suprimir nueva línea'. Estoy usando IDLE3 en Raspberry Pi para desarrollar Python 3.2 para PuTTY. Quería crear una barra de progreso en la línea de comando PuTTY. No quería que la página se desplazara. Quería una línea horizontal para asegurarle al usuario que se volviera loco de que el programa no se ha detenido ni ha sido enviado a almorzar en un feliz bucle infinito, como una súplica para que me deje, lo estoy haciendo bien, pero esto puede llevar algo de tiempo. mensaje interactivo: como una barra de progreso en el texto.

print('Skimming for', search_string, '\b! .001', end='') inicializa el mensaje preparándose para la siguiente escritura de pantalla, que imprimirá tres espacios de retroceso como ⌫⌫⌫ rubout y luego un punto, borrando '001' y extendiendo la línea de períodos. Después de que search_string repita la entrada del usuario, el \b! recorta el signo de exclamación de mi texto search_string para retroceder sobre el espacio que print() de lo contrario fuerza, colocando correctamente la puntuación. Eso es seguido por un espacio y el primer 'punto' de la 'barra de progreso' que estoy simulando. Innecesariamente, el mensaje también se imprime con el número de página (formateado en una longitud de tres con ceros a la izquierda) para que el usuario tome nota de que se está procesando el progreso y que también reflejará el recuento de períodos que luego desarrollaremos en el Correcto.

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

La barra de progreso está en la línea sys.stdout.write('\b\b\b.'+format(page, '03')). Primero, para borrar a la izquierda, hace una copia de seguridad del cursor sobre los tres caracteres numéricos con el '\ b \ b \ b' como ⌫⌫⌫ rubout y suelta un nuevo período para agregar a la longitud de la barra de progreso. Luego escribe tres dígitos de la página a la que ha progresado hasta ahora. Como sys.stdout.write() espera a que se cierre un búfer completo o que se cierre el canal de salida, sys.stdout.flush() fuerza la escritura inmediata. sys.stdout.flush() está integrado en el final de print() que se omite con print(txt, end='' ). Luego, el código recorre sus operaciones intensivas de tiempo mundano mientras no imprime nada más hasta que regresa aquí para borrar tres dígitos, agregar un punto y escribir tres dígitos nuevamente, incrementado.

Los tres dígitos borrados y reescritos no son necesarios de ninguna manera, es solo una floritura que ejemplifica sys.stdout.write() versus print(). Podrías cebar fácilmente con un punto y olvidarte de los tres sofisticados espacios de barra invertida-b ⌫ (por supuesto, no escribir también los recuentos de páginas formateadas) simplemente imprimiendo la barra de períodos más de una en una cada vez, sin espacios ni líneas nuevas usando solo el sys.stdout.write('.'); sys.stdout.flush() par.

Tenga en cuenta que el shell Python de Raspberry Pi IDLE3 no respeta el espacio de retroceso como ⌫ rubout, sino que imprime un espacio, creando en su lugar una lista aparente de fracciones.

- (o = 8> wiz

4
DisneyWizard 1 mar. 2015 a las 23:19
493386