Comment imprimer sans newline ni espace?

La question est dans le titre.

j'aimerais le faire dans . Ce que j'aimerais faire dans cet exemple dans :

#include <stdio.h>

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

sortie:

..........

En Python:

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

Python print va ajouter un n ou un espace, comment puis-je l'éviter? Maintenant, c'est juste un exemple. Ne me dis pas que je peux d'abord construire une corde puis l'imprimer. J'aimerais savoir comment "ajouter" des cordes à stdout .

1436
demandé sur ᴡʜᴀᴄᴋᴀᴍᴀᴅᴏᴏᴅʟᴇ3000 2009-01-29 23:58:25

25 réponses

de façon Générale

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

vous pouvez également avoir besoin d'appeler

sys.stdout.flush()

pour s'assurer que stdout est rincé immédiatement.

Python 2.6+

de Python 2.6 vous pouvez importer la fonction print de Python 3:

from __future__ import print_function

cela vous permet d'utiliser la solution Python 3 ci-dessous.

Python 3

In Python 3, l'instruction print a été changée en une fonction. En Python 3, vous pouvez à la place faire:

print('.', end='')

cela fonctionne aussi en Python 2, à condition que vous ayez utilisé from __future__ import print_function .

si vous avez des problèmes avec la mise en tampon, vous pouvez vider la sortie en ajoutant flush=True argument de mot clé:

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

cependant, notez que le mot-clé flush n'est pas disponible dans la version du print fonction importée de __future__ en Python 2; elle ne fonctionne qu'en Python 3, plus spécifiquement 3.3 et plus tard. Dans les versions précédentes, vous aurez toujours besoin de tirer la chasse manuellement avec un appel à sys.stdout.flush() .

1971
répondu codelogic 2018-08-03 15:25:12

, Il devrait être aussi simple que décrit sur ce lien par Guido Van Rossum:

Re: Comment imprimer sans c/R ?

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

Est-il possible d'imprimer quelque chose, mais pas automatiquement un retour chariot ajoutée ?

Oui, ajouter une virgule après le dernier argument imprimer. Par exemple, cette boucle imprime les nombres 0..9 sur une ligne séparée par des espaces. Note

>>> for i in range(10):
...     print i,
... else:
...     print
...
0 1 2 3 4 5 6 7 8 9
>>> 
278
répondu KDP 2018-01-09 01:04:42

Note: le titre de cette question était quelque chose comme "how to printf in python?"

puisque les gens peuvent venir ici à la recherche du titre, Python supporte aussi la substitution de style 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

et, vous pouvez facilement multiplier les valeurs de chaîne de caractères:

>>> print "." * 10
..........
157
répondu Beau 2012-12-20 19:02:29

utilisez la fonction d'impression de style python3 pour python2.6+ (cassera également tous les énoncés d'impression existants dans le même fichier.)

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

pour ne pas ruiner tous vos mots-clés d'impression python2, créez un fichier séparé printf.py 151980920"

# printf.py

from __future__ import print_function

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

ensuite, utilisez-le dans votre fichier

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

autres exemples montrant le style printf

printf('hello %s', 'world')
printf('%i %f', 10, 3.14)
#hello world10 3.140000
86
répondu k107 2014-04-28 07:33:19

Ce n'est pas la réponse à la question dans le titre, mais c'est la réponse sur la façon d'imprimer sur la même ligne:

import sys
for i in xrange(0,10):
   sys.stdout.write(".")
   sys.stdout.flush()
38
répondu lenooh 2010-12-03 17:16:00

la nouvelle fonction (à partir de Python 3.0) print a un paramètre optionnel end qui vous permet de modifier le caractère final. Il y a aussi sep pour séparateur.

23
répondu SilentGhost 2018-02-12 14:01:55

vous pouvez simplement ajouter , à la fin de la fonction print pour qu'il ne s'affiche pas sur une nouvelle ligne.

16
répondu user3763437 2014-07-10 19:45:40

utilisant des functools.partial pour créer une nouvelle fonction appelée printf

>>> import functools

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

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

manière facile d'envelopper une fonction avec des paramètres par défaut.

14
répondu sohail288 2015-06-17 01:55:02

print fonction en python génère automatiquement une nouvelle ligne. Vous pouvez essayer:

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

13
répondu klee8_ 2017-03-14 19:17:53

vous pouvez le faire avec end argument de print . En Python3, range() renvoie iterator et xrange() n'existe pas.

for i in range(10): print('.', end='')
9
répondu Maxim 2018-07-23 09:59:27

Code pour Python 3.6.1

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

Sortie

..........
>>>
8
répondu Jasmohan 2017-04-03 17:14:21

, Vous pouvez essayer:

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')
7
répondu alvas 2015-11-23 12:03:31

vous voulez imprimer quelque chose en boucle juste;mais vous ne voulez pas imprimer dans la nouvelle ligne à chaque fois.. par exemple:

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

 OUTPUT:
    hi
    hi
    hi
    hi
    hi

: hi hi hi hi hi hi droit???? il suffit d'ajouter une virgule après l'impression "hi"

exemple:

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

6
répondu Bala.K 2015-08-07 12:12:32

en Python 3, l'impression est une fonction. Quand vous appelez

print ('hello world')

Python le traduit en

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

vous pouvez changer end en ce que vous voulez.

print ('hello world', end = '')
print ('hello world', end = ' ')
6
répondu Yaelle 2016-07-10 01:36:32
for i in xrange(0,10): print '.',

ça va marcher pour vous. ici virgule (,) est important après impression. Obtenu de l'aide de : http://freecodeszone.blogspot.in/2016/11/how-to-print-in-python-without-newline.html

5
répondu Shekhar 2016-11-13 12:28:38

vous pouvez faire la même chose en python3 comme suit:

#!usr/bin/python

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

et l'exécuter avec python filename.py ou python3 filename.py

4
répondu Subbu 2013-07-05 17:37:06

@lenooh satisfait ma requête. J'ai découvert cet article en cherchant 'python suppress newline'. J'utilise IDLE3 sur Raspberry Pi pour développer Python 3.2 Pour PuTTY. Je voulais créer une barre de progression sur la ligne de commande PuTTY. Je ne voulais pas que la page s'efface. Je voulais une ligne horizontale pour rassurer l'utilisateur de ne pas paniquer que le programme n'a pas été arrêté ni envoyé au déjeuner sur une boucle infinie joyeuse - comme un appel à " laissez-moi être, je vais bien, mais ce mai prendre un certain temps.'message interactif - comme une barre de progression dans le texte.

le print('Skimming for', search_string, '\b! .001', end='') initialise le message en préparant l'Écriture suivante, qui imprimera trois backspaces as⌫⌫, puis une période, effaçant '001' et prolongeant la ligne de périodes. Après search_string perroquets entrée de l'utilisateur, le \b! ajuste le point d'exclamation de mon search_string texte à l'arrière sur l'espace que print() forces autrement, en plaçant correctement le ponctuation. Suivi d'un espace et du premier "point" de la "barre de progression" que je simule. Inutilement, le message est ensuite activé avec le numéro de la page (formaté à une longueur de trois avec des zéros en tête) pour prendre note de la part de l'utilisateur que progress est en cours de traitement et qui reflétera également le nombre de périodes que nous construirons plus tard à droite.

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 viande de la barre de progression est dans la ligne sys.stdout.write('\b\b\b.'+format(page, '03')) . Tout d'abord, effacer à gauche, il sauvegarde le curseur sur les trois caractères numériques avec le "\b\B\b " as ⌫ ⌫ rubout et laisse tomber une nouvelle période pour ajouter à la longueur de la barre de progression. Puis il écrit trois chiffres de la page, il a progressé jusqu'à présent. Parce que sys.stdout.write() attend qu'un tampon complet ou le canal de sortie se ferme, le sys.stdout.flush() force l'écriture immédiate. sys.stdout.flush() est intégré à la fin de print() qui est contourné par print(txt, end='' ) . Puis le code fait une boucle à travers ses opérations à forte intensité de temps. tandis qu'il imprime rien de plus jusqu'à ce qu'il retourne ici pour essuyer trois chiffres en arrière, ajouter une période et écrire trois chiffres à nouveau, incrémenté.

les trois chiffres effacés et réécrits ne sont en aucun cas nécessaires - c'est juste une fleur qui illustre sys.stdout.write() versus print() . Vous pourriez tout aussi bien prime avec une période et oublier les trois backslash de fantaisie-b ⌫ backspaces (bien sûr pas l'écriture formatée compte de page aussi bien) en imprimant simplement la barre de période plus d'un chaque fois à travers-sans espaces ou de nouvelles lignes en utilisant seulement la paire sys.stdout.write('.'); sys.stdout.flush() .

veuillez noter que la couche Python de Raspberry Pi IDLE3 n'honore pas le Backspace as ⌫ rubout mais imprime plutôt un espace, créant une liste apparente de fractions à la place.

- (o=8> wiz

4
répondu DisneyWizard 2015-03-01 23:19:25

python 2.6+ :

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

python 3 :

print('.', end='')

python <= 2.5 :

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

si un espace supplémentaire est disponible après chaque impression, en python 2

print '.',

trompeur en python 2 - éviter :

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') `
4
répondu n611x007 2015-07-22 17:09:59

j'ai récemment eu le même problème..

je l'ai résolu en faisant:

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)

cela fonctionne à la fois sur unix et windows ... ne l'ai pas testé sur macosx ...

hth

4
répondu ssgam 2016-04-17 19:59:40

, Vous remarquerez que toutes les réponses ci-dessus sont correctes. Mais je voulais faire un raccourci pour toujours écrire le paramètre " end=" à la fin.

vous pouvez définir une fonction comme

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

elle accepterait tous les paramètres. Même il acceptera tous les autres paramètres comme le fichier, flush ,etc et avec le même nom.

4
répondu Bikram Kumar 2017-03-09 05:54:20

Beaucoup de ces réponses semblent un peu compliqué. En Python 3.X vous faites simplement ceci,

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

La valeur par défaut est "\n". Nous le changeons simplement en un espace ou vous pouvez aussi utiliser end="".

3
répondu jarr 2015-11-24 18:46:28
for i in xrange(0,10): print '\b.',

cela a fonctionné dans les deux 2.7.8 et 2.5.2 (Canopy et terminal OSX, respectivement) -- pas d'importations de module ou de voyage dans le temps requis.

3
répondu tyersome 2016-12-18 21:13:00

Voici une façon générale d'imprimer sans insérer une nouvelle ligne.

Python 3

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

en Python 3, il est très simple d'implémenter

1
répondu Steffi Keran Rani J 2016-12-10 08:51:44

...vous n'avez pas besoin d'importer n'importe quelle bibliothèque. Il suffit d'utiliser le caractère supprimer:

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

cela supprime la nouvelle ligne et l'espace ( ^ _ ^ ) *

0
répondu mchrgr2000 2017-05-17 04:50:57

il y a deux façons générales de faire ceci:

Impression sans retour à la ligne en Python 3.x

N'Ajouter rien après l'énoncé d'impression et supprimer "\n" en utilisant end='' comme:

>>> 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='-' but not '\n'
hello world # it seem correct output

un autre exemple dans la boucle :

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

Impression sans retour à la ligne en Python 2.x

ajout d'une traînée virgule après l'impression ignorer '\n'.

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

un autre exemple dans la boucle :

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

espérons que cela vous aidera. Vous pouvez visiter ce lien .

0
répondu Sushant 2018-08-20 13:35:42