Ejemplo en C:

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

Producción:

....

En Python:

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

En Python, printagregará un \nespacio o. ¿Cómo puedo evitar eso? Me gustaría saber cómo "agregar" cadenas a stdout.

respuesta

En Python 3, puede usar los parámetros sep=y de la función:end=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 cualquier parámetro y puede usar ambos parámetros al mismo tiempo.

Si tiene problemas con el almacenamiento en búfer, puede vaciar la salida agregando un flush=Trueargumento de palabra clave:

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

Pitón 2.6 y 2.7

Desde Python 2.6 puede importar la printfunción desde Python 3 usando el __future__módulo :

from __future__ import print_function

lo que le permite usar la solución de Python 3 anterior.

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

O puedes usarsys.stdout.write()

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

Es posible que también deba llamar

sys.stdout.flush()

para asegurarse de que stdoutse enjuague inmediatamente.

Para Python 2 y versiones anteriores, debería ser tan simple como se describe en Re: ¿Cómo se imprime sin un CR? por Guido van Rossum (parafraseado):

Is it possible to print something, but not automatically have a carriage return appended to it?

Sí, agregue una coma después del último argumento para imprimir. Por ejemplo, este ciclo 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
>>>

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

Dado que las personas pueden venir aquí a buscarlo según el 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
..........

Use la función de impresión de estilo Python 3 para Python 2.6+ (también romperá cualquier declaración de impresión con palabras clave existente en el mismo archivo) .

# For Python 2 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 de Python 2, cree un printf.pyarchivo 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

Cómo imprimir en la misma línea:

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

La printfunción en Python 3.x tiene un parámetro opcional endque le permite modificar el carácter final:

print("HELLO", end="")
print("HELLO")

Producción:

HELLOHELLO

También hay seppara separador:

print("HELLO", "HELLO", "HELLO", sep="")

Producción:

HELLOHELLOHELLO

Si desea usar esto en Python 2.x, solo agregue esto al comienzo de su archivo:

from __future__ import print_function

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

>>> import functools

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

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

Es una manera fácil de envolver una función con parámetros predeterminados.

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

print('Hello, World!')

Python lo traduce a

print('Hello, World!', end='\n')

Puedes cambiar enda lo que quieras.

print('Hello, World!', end='')
print('Hello, World!', end=' ')

En Python 2.x, solo puede agregar ,al final de la printfunción, por lo que no se imprimirá en una nueva línea.

En general, hay dos maneras de hacer esto:

Imprimir sin una 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

# The solution is:
>>> print('hello', end='');print(' world'); # End with anything like end='-' or end=" ", but not '\n'
hello world # It seems to be the correct output

Otro ejemplo en bucle :

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

Imprimir sin una nueva línea en Python 2.x

Agregar una coma final dice: 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),

Puedes visitar este enlace .

Pitón 3 :

print('.', end='')

Pitón 2.6+ :

from __future__ import print_function # needs to be first statement in file
print('.', end='')

Pitón <= 2.5 :

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

Si el espacio adicional está bien después de cada impresión, en Python 2:

print '.',

Engañoso en Python 2 - evitar :

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

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

Recientemente tuve el mismo problema...

Lo resolví haciendo:

import sys, os

# Reopen standard output 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, pero no lo he probado en Mac OS X.

Puede hacer lo mismo en Python 3 de la siguiente manera:

#!usr/bin/python

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

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

Muchas de estas respuestas parecen un poco complicadas. En Python 3.x simplemente haces esto:

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

El valor predeterminado de fin es "\n". Simplemente lo estamos cambiando a un espacio o también puede usar end=""(sin espacio) para hacer lo que printfnormalmente hace.

Desea imprimir algo en el bucle for a la derecha; pero no quieres 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 así: hola hola hola hola hola verdad????

Simplemente agregue una coma después de imprimir "hola".

Ejemplo:

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

PRODUCCIÓN:

hi hi hi hi hi

Notarás 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 todo el número de parámetros. Incluso aceptará todos los demás parámetros, como archivo, descarga, etc. y con el mismo nombre.

lenooh satisfizo mi consulta. Descubrí este artículo mientras buscaba 'python suprimir nueva línea'. Estoy usando IDLE 3 en Raspberry Pi para desarrollar Python 3.2 para PuTTY .

Quería crear una barra de progreso en la línea de comandos de PuTTY. No quería que la página se desplazara. Quería una línea horizontal para asegurar al usuario que no se asuste porque el programa no se ha detenido ni ha sido enviado a almorzar en un feliz bucle infinito, como una súplica de "déjame en paz, estoy bien, pero esto puede llevar algo de tiempo. mensaje interactivo - como una barra de progreso en el texto.

Inicializa el print('Skimming for', search_string, '\b! .001', end='')mensaje preparándolo para la siguiente escritura en pantalla, que imprimirá tres espacios de retroceso como ⌫⌫⌫ rubout y luego un punto, borrando '001' y extendiendo la línea de puntos.

Después search_stringde la entrada del usuario de loros, \b!recorta el signo de exclamación de mi search_stringtexto para retroceder sobre el espacio que de print()otro modo fuerza, colocando correctamente la puntuación. A eso le sigue un espacio y el primer 'punto' de la 'barra de progreso' que estoy simulando.

Innecesariamente, el mensaje también se antepone con el número de página (formateado a una longitud de tres con ceros a la izquierda) para que el usuario se dé cuenta de que se está procesando el progreso y que también reflejará el recuento de períodos que luego construiremos para el derecho.

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 carne de la barra de progreso está en la sys.stdout.write('\b\b\b.'+format(page, '03'))línea. Primero, para borrar a la izquierda, retrocede el cursor sobre los tres caracteres numéricos con el '\b\b\b' como ⌫⌫⌫ rubout y deja caer un nuevo punto para agregar a la longitud de la barra de progreso. Luego escribe tres dígitos de la página a la que ha avanzado hasta el momento. Como sys.stdout.write()espera a que se llene el búfer o se cierre el canal de salida, sys.stdout.flush()fuerza la escritura inmediata. sys.stdout.flush()está integrado en el extremo del print()cual se omite con print(txt, end='' ). Luego, el código recorre sus operaciones mundanas intensivas en tiempo mientras no imprime nada más hasta que regresa aquí para borrar tres dígitos, agregar un punto y escribir tres dígitos nuevamente, incrementados.

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 preparar fácilmente con un punto y olvidarte de los tres elegantes retrocesos de barra invertida-b ⌫ (por supuesto, sin escribir también el recuento de páginas formateadas) simplemente imprimiendo la barra de punto más larga cada vez, sin espacios ni saltos de línea usando solo el sys.stdout.write('.'); sys.stdout.flush()par.

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

 for i in range(0, 5): #setting the value of (i) in the range 0 to 5 
     print(i)

El código anterior da el siguiente resultado:

 0    
 1
 2
 3
 4

Pero si desea imprimir todos estos resultados en línea recta, todo lo que debe hacer es agregar un atributo llamado end() para imprimir.

 for i in range(0, 5): #setting the value of (i) in the range 0 to 5 
     print(i, end=" ")

Producción:

 0 1 2 3 4

Y no solo un espacio, también puede agregar otras terminaciones para su salida. Por ejemplo,

 for i in range(0, 5): #setting the value of (i) in the range 0 to 5 
     print(i, end=", ")

Producción:

 0, 1, 2, 3, 4, 

Recordar:

 Note: The [for variable in range(int_1, int_2):] always prints till the variable is 1

 less than it's limit. (1 less than int_2)

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 the Python 2 version
    Print(i)

Salidas:

0123456789

solo usa el end="" o sep=""

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

producción:

.........
for i in xrange(0,10): print '\b.',

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

Python3:

print('Hello',end='')

Ejemplo :

print('Hello',end=' ')
print('world')

Producción: Hello world

Este método agrega spearator entre los textos proporcionados:

print('Hello','world',sep=',')

Producción:Hello,world

No es necesario importar ninguna biblioteca. Simplemente use el carácter de eliminación:

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

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