2196 votes

Comment imprimer en Python sans nouvelle ligne ni espace ?

La question est dans le titre.

J'aimerais faire en Python ce que je fais en C dans cet exemple :

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

En Python print ajoutera un ' \n ou un espace, comment puis-je éviter cela ? Ce n'est qu'un exemple. Ne me dites pas que je peux d'abord faire une chaîne puis l'imprimer. Je voudrais savoir comment "ajouter" des chaînes de caractères à la sortie standard (je ne sais pas si c'est bien formulé).

8 votes

Pour ceux qui cherchent la documentation sur le formatage des chaînes de caractères de python : docs.python.org/library/stdtypes.html#string-formatting

1 votes

Il semble qu'une question similaire ait été posée précédemment : https://stackoverflow.com/q/255147/9325817

1 votes

Un peu tard pour la fête, mais pourquoi pas print("." * 10) ?

2986voto

codelogic Points 22722
import sys
sys.stdout.write('.')

ou

print('.'), # this will still print a space, but not a newline

Veuillez noter qu'en Python 3, la fonction print a été transformée en fonction, de sorte que le deuxième exemple ne fonctionnera plus. En Python 3, vous pouvez à la place faire :

print('.', end="")

Ou si vous avez des problèmes avec le tampon, vous pouvez faire ceci .

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

9 votes

Merci ! Dans Python 3.6.3, ce flush=True est crucial, sinon cela ne fonctionne pas comme prévu.

7 votes

Quelqu'un peut-il m'expliquer pourquoi j'aurais besoin de flush et que fait-il en réalité ?

9 votes

C'est avec quelques mois de retard, mais pour répondre à @Rishav, la chasse d'eau vide le tampon et affiche la sortie dès maintenant. Sans flush, vous pourriez éventuellement avoir votre texte exact imprimé, mais seulement lorsque le système traitera les graphiques au lieu des entrées/sorties. Flush rend le texte visible immédiatement en "vidant" le cache.

302voto

KDP Points 281

Cela devrait être aussi simple que ce qui est décrit sur ce lien par Guido Van Rossum :

Re : Comment imprimer sans c/r ?

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

Est-il possible d'imprimer quelque chose sans qu'un retour chariot soit automatiquement ajouté ? automatiquement un retour chariot ?

Oui, ajoutez une virgule après le dernier argument à imprimer. Par exemple, cette boucle imprime les nombres 0..9 sur une ligne séparés par des espaces. Notez le "print" sans paramètre qui ajoute la dernière virgule :

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

109 votes

Ceci est spécifiquement listé dans la question comme un comportement indésirable à cause des espaces

96 votes

Au contraire, la réponse devrait être supprimée pour deux raisons : elle a des effets secondaires indésirables que vous ne pouvez pas désactiver (espaces supplémentaires inclus), et elle n'est pas compatible avec python 3 (les parenthèses forcent une conversion en tuple). Je m'attends à ce que ce genre de constructions bâclées viennent de PHP, pas de Python. Il est donc préférable de ne jamais l'utiliser.

11 votes

// , C'est la façon la plus simple de le faire en Python 2, et il existe BEAUCOUP de code unique pour les très vieux systèmes d'exploitation. Ce n'est probablement pas la meilleure solution, ni même recommandée. Cependant, l'un des grands avantages de StackOverflow est qu'il nous permet de savoir quels sont les trucs bizarres qui existent. KDP, pourriez-vous inclure un avertissement rapide en haut de page sur ce que @Eric Leschinski a dit ? Cela a du sens, après tout.

178voto

Beau Points 3353

Note : Le titre de cette question était auparavant quelque chose comme "Comment faire un printf en python ?".

Puisque les gens peuvent venir ici pour le chercher en se basant sur le titre, Python supporte également 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 des chaînes de caractères :

>>> print "." * 10
..........

11 votes

En effet, c'est passer à côté de l'essentiel :) Comme il y avait déjà une excellente réponse à la question, je ne faisais qu'élaborer des techniques connexes qui pourraient s'avérer utiles.

8 votes

D'après l'intitulé de la question, je pense que cette réponse est plus appropriée par analogie avec la façon dont on utilise couramment printf en C/C++.

17 votes

Cela répond au titre de la question, mais pas au corps de celle-ci. Cela dit, elle m'a fourni ce que je cherchais :)

97voto

kristi Points 3078

Utilisez la fonction print de style python3 pour python2.6+. (cela brisera également toute instruction d'impression avec mot-clé existante 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 gâcher tous vos mots-clés d'impression de python2, créez un fichier séparé printf.py fichier

# 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

46voto

lenooh Points 507

Ce n'est pas la réponse à la question posée dans le titre, mais c'est la réponse à la question de savoir comment imprimer sur la même ligne :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X