web-dev-qa-db-fra.com

Comment imprimer sans nouvelle ligne ni espace?

La question est dans le titre.

Je voudrais le faire dans python . Ce que j'aimerais faire dans cet exemple dans c :

En 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 '.',
. . . . . . . . . .

Dans Python print ajoutera un \n ou un espace, comment puis-je éviter cela? Maintenant, ce n'est qu'un exemple. Ne me dites pas que je peux d'abord créer une chaîne, puis l'imprimer. Je voudrais savoir comment "ajouter" des chaînes à stdout.

1697
Andrea Ambu

Manière générale

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

Vous pouvez également avoir besoin d'appeler

sys.stdout.flush()

pour s'assurer que stdout est vidé 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

Dans Python 3, l'instruction print a été transformée en une fonction. Dans Python 3, vous pouvez plutôt faire:

print('.', end='')

Cela fonctionne également dans Python 2, à condition que vous ayez utilisé from __future__ import print_function.

Si vous rencontrez des problèmes de mise en mémoire tampon, vous pouvez vider la sortie en ajoutant l'argument de mot clé flush=True:

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

Notez cependant que le mot clé flush n'est pas disponible dans la version de la fonction print importée de __future__ dans Python 2; cela ne fonctionne que dans Python 3, plus précisément 3.3 et les versions ultérieures. Dans les versions antérieures, vous devrez toujours vider manuellement avec un appel à sys.stdout.flush().

Sources

  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

Cela 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 sans qu'un retour chariot soit automatiquement ajouté à celui-ci?

Oui, ajoutez 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. Notez le "print" sans paramètre qui ajoute la nouvelle ligne:

>>> for i in range(10):
...     print i,
... else:
...     print
...
0 1 2 3 4 5 6 7 8 9
>>> 
292
KDP

Remarque: le titre de cette question s'appelait autrefois "Comment imprimer en python?"

Etant donné que les gens peuvent venir chercher ici en fonction du titre, Python prend également en charge 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:

>>> print "." * 10
..........
165
Beau

Utilisez la fonction d’impression de style python3 pour python2.6 + (cassera également toutes les instructions d’impression à mots-clés existantes 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 printf.py séparé.

# printf.py

from __future__ import print_function

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

Ensuite, utilisez-le dans votre dossier

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

Plus d'exemples montrant le style printf

printf('hello %s', 'world')
printf('%i %f', 10, 3.14)
#hello world10 3.140000
91
k107

Comment imprimer sur la même ligne:

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

La nouvelle fonction Python 3.0) print possède un paramètre facultatif end qui vous permet de modifier le caractère de fin. Il y a aussi sep pour le séparateur.

26
SilentGhost

Utilisation de functools.partial pour créer une nouvelle fonction appelée printf

>>> import functools

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

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

Un moyen facile pour envelopper une fonction avec les paramètres par défaut.

20
sohail288

Vous pouvez simplement ajouter , à la fin de la fonction print pour ne pas imprimer sur la nouvelle ligne.

17
user3763437

print fonction dans python génère automatiquement une nouvelle ligne. Tu pourrais essayer:

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

15
klee8_

Vous pouvez le faire avec l'argument end de print. En Python3, range() renvoie l'itérateur et xrange() n'existe pas.

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

Code pour Python 3.6.1

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

sortie

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

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

Dans 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 la fin en ce que vous voulez.

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

si l'espace supplémentaire est correct après chaque impression, sous python 2

print '.',

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

j'ai eu récemment 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 sous unix et sous windows ... je ne l'ai pas testé sous macosx ...

hth

6
ssgam

Vous remarquerez que toutes les réponses ci-dessus sont correctes. Mais je voulais créer 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)

Il accepterait tout le nombre de paramètres. Même il acceptera tous les autres paramètres tels que file, flush, etc. et avec le même nom.

5
Bikram Kumar

Vous pouvez faire la même chose dans 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

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

Cela fonctionnera pour vous. Ici, la virgule (,) est importante après l'impression. A obtenu de l'aide de: http://freecodeszone.blogspot.in/2016/11/how-to-print-in-python-without-newline.html

4
Shekhar

Beaucoup de ces réponses semblent un peu compliquées. Dans Python 3.X, vous le faites simplement,

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

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

4
jarr

@lenooh a 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 de PuTTY. Je ne voulais pas que la page défile. Je voulais une ligne horizontale pour rassurer l'utilisateur de ne pas paniquer que le programme ne soit ni arrêté ni envoyé pour déjeuner sur une boucle infinie et joyeuse - comme un plaidoyer pour 'laissez-moi être, je vais bien, mais cela peut prendre du temps. message interactif - comme une barre de progression dans le texte.

La print('Skimming for', search_string, '\b! .001', end='') initialise le message en préparant la prochaine écriture sur écran, qui imprimera trois espaces arrières sous forme de ⌫⌫⌫ rubout, puis de point, en effaçant "001" et en prolongeant la ligne de points. Après search_string perroquets entrée utilisateur, le \b! ajuste le point d'exclamation de mon texte search_string pour revenir sur l'espace que print() oblige sinon à placer correctement la ponctuation. Cela est suivi d'un espace et du premier "point" de la "barre de progression" que je simule. Inutile- ment, le message est également amorcé avec le numéro de page (formaté avec une longueur de trois avec des zéros non significatifs) pour indiquer à l'utilisateur que l'avancement est en cours de traitement et qui reflètera également le nombre de périodes que nous allons créer ultérieurement. 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 barre de progression est dans la ligne sys.stdout.write('\b\b\b.'+format(page, '03')). Tout d'abord, pour effacer à gauche, il sauvegarde le curseur sur les trois caractères numériques avec le caractère '\ b\b\b' comme rubout et supprime une nouvelle période à ajouter à la longueur de la barre de progression. Ensuite, il écrit trois chiffres de la page à laquelle il a progressé jusqu'à présent. Étant donné que sys.stdout.write() attend la fermeture d'un tampon complet ou de la fermeture du canal de sortie, la sys.stdout.flush() force l'écriture immédiate. sys.stdout.flush() est intégré à la fin de print(), qui est ignoré avec print(txt, end='' ). Ensuite, le code parcourt ses opérations quotidiennes fastidieuses sans rien imprimer de plus, jusqu'à ce qu'il revienne ici pour effacer trois chiffres, ajouter un point et réécrire trois chiffres, incrémentés.

Les trois chiffres effacés et réécrits ne sont nullement nécessaires - il s’agit simplement d’une floraison qui illustre sys.stdout.write() par rapport à print(). Vous pouvez tout aussi facilement utiliser une période et oublier les trois arrières espaces backslash-b f (bien sûr, ne pas écrire les comptes de page formatés) en imprimant simplement la barre de période plus longue de chaque fois, sans espaces ni traits nouveaux. sys.stdout.write('.'); sys.stdout.flush() paire.

Veuillez noter que le shell Raspberry Pi IDLE3 Python ne considère pas le retour arrière comme un ⌫ rubout, mais affiche un espace, créant à la place une liste apparente de fractions.

- (o = 8> wiz

4
DisneyWizard

vous voulez imprimer correctement quelque chose dans la boucle, mais vous ne voulez pas qu'elle soit imprimée à chaque nouvelle ligne .. par exemple:

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

 OUTPUT:
    hi
    hi
    hi
    hi
    hi

mais vous voulez que ça soit comme ça: hi hi hi hi hi hi right ???? il suffit d'ajouter une virgule après l'impression "salut"

Exemple:

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.',

Cela fonctionnait à la fois dans les versions 2.7.8 et 2.5.2 (respectivement Canopy et OSX) - aucune importation de module ou déplacement dans le temps requis.

2
tyersome

Ou avoir une fonction comme:

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

Alors maintenant:

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

Les sorties:

0123456789
2
U10-Forward

Voici une manière générale d’imprimer sans insérer de nouvelle ligne.

Python

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

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

1
Steffi Keran Rani J