Comment imprimer sans newline ni espace?
La question est dans le titre.
j'aimerais le faire dans python . Ce que j'aimerais faire dans cet exemple dans c :
#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
.
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()
.
, 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
>>>
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
..........
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
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()
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.
vous pouvez simplement ajouter ,
à la fin de la fonction print
pour qu'il ne s'affiche pas sur une nouvelle ligne.
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.
print
fonction en python génère automatiquement une nouvelle ligne. Vous pouvez essayer:
print("Hello World", end="")
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='')
Code pour Python 3.6.1
for i in range(0,10): print('.' , end="")
Sortie
..........
>>>
, 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')
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
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 = ' ')
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
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
@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
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') `
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
, 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.
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="".
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.
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
...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 ( ^ _ ^ ) *
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 .