Question

La question est dans le titre.

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

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

En 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 & "Annexer &"; chaînes à stdout.

Était-ce utile?

La solution

Manière générale

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

Vous pouvez également avoir besoin d'appeler

sys.stdout.flush()

pour vous assurer que stdout est vidé immédiatement.

Python 2.6 +

Depuis Python 2.6, vous pouvez importer la print fonction depuis Python 3:

from __future__ import print_function

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

Python 3

Dans Python 3, l'instruction from __future__ import print_function a été modifiée en une fonction. En Python 3, vous pouvez plutôt faire:

print('.', end='')

Ceci fonctionne également en Python 2, à condition que vous ayez utilisé flush=True.

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

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

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

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

Autres conseils

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

Objet: comment imprimer sans c / r?

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

  

Est-il possible d’imprimer quelque chose sans avoir automatiquement une   retour chariot annexé?

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. Remarque le "less sans paramètre, print " qui ajoute la nouvelle ligne finale:

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

Remarque: le titre de cette question ressemblait autrefois à & "Comment imprimer en python? &";

Etant donné que les gens peuvent venir ici à la recherche 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
..........

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

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

Plus d'exemples montrant le style printf

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

Comment 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 facultatif end qui vous permet de modifier le caractère de fin. Il y a aussi sep pour le séparateur.

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 d’envelopper une fonction avec les paramètres par défaut.

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

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

En Python 3, l’impression est une fonction. Lorsque vous appelez

print ('hello world')

Python le traduit en

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

Vous pouvez changer de bout en ce que vous voulez.

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

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 l'espace supplémentaire est correct 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 sous unix et windows ... je ne l'ai pas testé sur macosx ...

hth

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

Vous remarquerez que toutes les réponses ci-dessus sont correctes. Mais je voulais créer un raccourci pour toujours écrire le & Quot; end = '' " paramètre à 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 s'il accepte tous les autres paramètres tels que fichier, vidage, etc. et avec le même nom.

@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 pas bloqué ni envoyé pour déjeuner sur une joyeuse boucle infinie - 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.

Le print('Skimming for', search_string, '\b! .001', end='') initialise le message en préparant la prochaine écriture sur écran, qui imprimera trois espaces arrière sous la forme & # 9003; & # 9003; & # 9003; frottez puis une période, en effaçant '001' et en prolongeant la ligne des périodes. Après search_string l'entrée utilisateur de perroquets, \b! réduit le point d'exclamation de mon print() texte pour revenir au-dessus de l'espace que sys.stdout.write('\b\b\b.'+format(page, '03')) 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 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 barre de progression est dans la ligne sys.stdout.write(). Premièrement, pour effacer à gauche, il place le curseur sur les trois caractères numériques avec le caractère '\ b \ b \ b' comme & # 9003; & # 9003; & # 9003; frotte et laisse tomber 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.flush() attend la fermeture d’un tampon complet ou du canal de sortie, print(txt, end='' ) force l’écriture immédiate. sys.stdout.write('.'); sys.stdout.flush() est intégré à la fin de <=> qui est ignoré avec <=>. Ensuite, le code parcourt ses opérations quotidiennes fastidieuses alors qu’il n’imprime rien de plus, jusqu’à ce qu’il revienne ici pour effacer trois chiffres, ajouter un point et réécrire trois chiffres, incrémenté.

Les trois chiffres effacés et réécrits ne sont en aucun cas nécessaires - c’est juste un succès qui illustre <=> par rapport à <=>. Vous pouvez tout aussi facilement amorcer une période et oublier les trois barres obliques inversées fantaisie-b & # 9003; les backspaces (bien sûr, ne pas écrire les pages formatées compte également) en imprimant simplement la barre de période plus longue de un à chaque passage - sans espaces ni nouvelles lignes en utilisant uniquement la <=> paire.

Veuillez noter que le shell Raspberry Pi IDLE3 Python n'honore pas le retour arrière comme & # 9003; frotte, mais affiche un espace et crée une liste apparente de fractions.

& # 8212; (o = 8 > wiz

vous voulez imprimer 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 qu'il soit imprimé comme ceci: salut salut salut salut salut salut 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

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

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

La valeur par défaut de end est & "; \ n &"; Nous le modifions simplement en un espace ou vous pouvez également utiliser end = & "; &";.

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

Cela fonctionnait à la fois dans 2.7.8 & amp; 2.5.2 (terminaux Canopy et OSX, respectivement) - aucune importation de module ni déplacement dans le temps requis.

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)

Sorties:

0123456789

Il existe deux méthodes générales pour le faire:

Imprimer sans nouvelle ligne dans Python 3.x

N'ajoutez rien après l'instruction print et supprimez '\ 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='-' or end=" " but not '\n'
hello world # it seem correct output

Un autre exemple en boucle :

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

Imprimer sans nouvelle ligne dans Python 2.x

L'ajout d'une virgule de fin indique qu'après impression, ignorer \n.

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

Un autre exemple en boucle :

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

J'espère que cela vous aidera. Vous pouvez visiter ce lien .

... vous n'avez pas besoin d'importer de bibliothèque. Utilisez simplement le caractère de suppression:

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top