Вопрос содержится в названии.
Я'хотел бы сделать это в [tag:Python]. То, что я'хотел бы сделать в этом примере в [tag:C]:
В C:
#include <stdio.h>
int main() {
int i;
for (i=0; i<10; i++) printf(".");
return 0;
}
Выход:
..........
На языке Python:
>>> for i in xrange(0,10): print '.'
.
.
.
.
.
.
.
.
.
.
>>> for i in xrange(0,10): print '.',
. . . . . . . . . .
В Python print
добавит \n
или пробел, как я могу избежать этого? Это всего лишь пример. Не говорите мне, что я могу сначала построить строку, а потом распечатать ее. Я хотел бы знать, как "добавлять" строки в stdout
.
import sys
sys.stdout.write('.')
Вам также может понадобиться позвонить
sys.stdout.flush()
чтобы обеспечить немедленную очистку stdout
.
Начиная с Python 2.6 вы можете импортировать функцию print
из Python 3:
from __future__ import print_function
Это позволяет использовать приведенное ниже решение на Python 3.
В Python 3 оператор print
был преобразован в функцию. Вместо этого в Python 3 можно сделать следующее:
print('.', end='')
Это также работает в Python 2, при условии, что вы использовали from __future__ import print_function
.
Если у вас проблемы с буферизацией, вы можете промыть вывод, добавив ключевое слово flush=True
:
print('.', end='', flush=True)
Однако обратите внимание, что ключевое слово flush
недоступно в версии функции print
, импортированной из __future__
в Python 2; оно работает только в Python 3, а точнее в 3.3 и более поздних версиях. В более ранних версиях вам все равно придется очищать вывод вручную вызовом sys.stdout.flush()
.
Он должен быть максимально простым, как описано по этой ссылке Гвидо ван Россум:
Re: Как не печатать без С/Р ?
http://legacy.python.org/search/hypermail/python-1992/0115.html
Есть возможность печатать что-то, но не автоматически возврат каретки добавленным к нему ?
Да, добавьте запятую после последнего аргумента для печати. Например, этот цикл выводит цифры от 0..9 в строке, разделенных пробелами. Примечание непараметризованный на "печать", что добавляет завершающий символ новой строки:
>>> for i in range(10):
... print i,
... else:
... print
...
0 1 2 3 4 5 6 7 8 9
>>>
Примечание: название этого вопроса раньше было что-то вроде "Как printf в python? "_
Поскольку люди могут прийти сюда в поисках этого, основываясь на названии, Python также поддерживает подстановку в стиле 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
Кроме того, вы можете легко перемножать строковые значения:
>>> print "." * 10
..........
Используйте питон3-стиль функции печати для python2.6+ (также нарушит существующий keyworded печати заявления в один и тот же файл.)
# for python2 to use the print() function, removing the print keyword
from __future__ import print_function
for x in xrange(10):
print('.', end='')
Чтобы не разрушить все, вместо python2 печати ключевые слова, создайте отдельный файл printf.py `
# printf.py
from __future__ import print_function
def printf(str, *args):
print(str % args, end='')
Затем используйте это в ваш файл
from printf import printf
for x in xrange(10):
printf('.')
print 'done'
#..........done
Несколько примеров, показывающих стиля printf
printf('hello %s', 'world')
printf('%i %f', 10, 3.14)
#hello world10 3.140000
Как печатать на той же строке:
import sys
for i in xrange(0,10):
sys.stdout.write(".")
sys.stdout.flush()
Новая (начиная с Python 3.0) функция print
имеет дополнительный параметр end
, позволяющий изменять завершающий символ. Есть также sep
для разделителя.
Использование functools.частично, чтобы создать новую функцию под названием Е
>>> import functools
>>> printf = functools.partial(print, end="")
>>> printf("Hello world\n")
Hello world
Простой способ, чтобы обернуть функцию с параметрами по умолчанию.
Вы можете просто добавить ,
в конце функции "печать", поэтому он выиграл'т печати на новую строку.
В Python 3, функция печати. Когда вы звоните
print ('hello world')
В Python переводит его в
print ('hello world', end = '\n')
Вы можете изменить конец, что вы хотите.
print ('hello world', end = '')
print ('hello world', end = ' ')
Вы можете попробовать:
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')
питон 2.6+:
from __future__ import print_function # needs to be first statement in file
print('.', end='')
питон 3:
print('.', end='')
в Python <= 2.5:
import sys
sys.stdout.write('.')
если дополнительное пространство OK после каждой печати, в Python 2
print '.',
сообщают в Python 2 - не:
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') `
недавно у меня была такая же проблема..
я решил его:
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)
это работает на UNIX и Windows ... не проверял на MacOSX ...
НТН
Вы заметите, что все вышеуказанные ответы верны. Но я хотел сделать ярлык всегда писать " в конце='' " и параметр в конце концов.
Можно определить функцию как
def Print(*args,sep='',end='',file=None,flush=False):
print(*args,sep=sep,end=end,file=file,flush=flush)
Это было бы принять все количество параметров. Даже он будет принимать все другие параметры, такие как файл, флеш ,и т. д. и с тем же именем.
@lenooh удовлетворил мой запрос. Я обнаружил эту статью, когда искал 'Python для подавления перевод строки'. Я'м через IDLE3 на Raspberry Pi, чтобы разрабатывать на Python 3.2 для шпатлевки. Я хотел создать прогресс-бар в командной строке шпатлевка. Я не'т хотите, чтобы прокрутка страниц подальше. Я хотел горизонтальную линию, чтобы уверить пользователя от психовать, что программа еще'т cruncxed к остановке, ни было отправлено на обед на веселый бесконечный цикл - как призыв к 'оставьте меня в покое, Я'м делаешь хорошо, но это может занять некоторое время.' интерактивные сообщения - как прогресс-бар в текст.
Печать('удалять', search_string, '\б! .001', Конец='')инициализирует сообщение по подготовке к следующему экрану-запись, которая будет печатать три backspaces как ⌫⌫⌫ убийства, а затем в период, вытирая '001' и продолжив эту линию периодов. После search_string
попугаи ввода пользователя \Б!
кантом восклицательный знак моей search_string
текст обратно в течение которого печать()` сил, в противном случае, правильно поставив знаки препинания. Что's, затем пробел и первый 'точка' и#39;прогресс-бар' Я'м моделирования. Излишне, сообщение тоже потом загрунтовать страницы количество (форматированный в длину трех с ведущими нулями), чтобы обратить внимание пользователя, что прогресс обработать и который отражает количество периодов, мы будем позже строить направо.
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')
Прогресс-бар мясо в Сыс.поток stdout.написать('\б\б\б.' формата+(стр., '03'))линии. Во-первых, чтобы стереть с левой, он спиной вверх курсор на трех цифровых символов с '\б\б\б' как ⌫⌫⌫ убийства и капли нового периода чтобы добавить прогресс бар длина. Затем он пишет три цифры номера страницы, на которой он развивал до сих пор. Потому что представление sys.поток stdout.записать()
ждет полный буфер или выходной канал закрыть, индикатор sys.поток stdout.метод flush()
сил немедленного писать. sys файла.поток stdout.метод flush()построен в конце печать ()
, который обходится с принтом(тхт, конец='' )`. Затем код проходит через ее мирское интенсивное время операции, в то время как он печатает ничего больше, пока он не вернется сюда, чтобы стереть три цифры назад, добавить в период и снова написать три цифры, увеличивается.
Три цифры стерли и переписали не надо - это's просто загогулина, которая иллюстрирует пакет sys.поток stdout.записать () " и " печать()
. Можно просто прогрунтовать период и забудь три необычные слеш-б ⌫ backspaces (конечно, не пишу странице формата считается хорошо) просто печатанием период бар уже по одному каждый раз - без пробелов или переводов строк, используя только индикатор sys.поток stdout.писать('.'); Сыс.поток stdout.пара заподлицо ()
.
Обратите внимание, что малина Пи IDLE3 оболочки Python, тот не чтит и Backspace как убийства ⌫ но вместо этого печатает пространство, создавая вместо явного список фракций.
—(о=8> визом
вы хотите напечатать что-нибудь в петлю справа;но вы не'т хотим, чтобы это печатать в новую строку каждый раз.. например:
for i in range (0,5):
print "hi"
OUTPUT:
hi
hi
hi
hi
hi
но вы хотите напечатать такой: привет привет привет привет привет привет да???? просто добавьте запятую после печати и"привет и"
Пример:
Для я в диапазоне (0,5): печати и"привет и", Выход: привет привет привет привет привет `
Многие из этих ответов, кажется, немного сложнее. В Python 3.X вы просто сделать это,
print(<expr>, <expr>, ..., <expr>, end=" ")
Значение по умолчанию концов есть "\П" по. Мы просто меняем его на место, или вы можете использовать конец=" не то".
for i in xrange(0,10): print '\b.',
Это работает в обоих &амп 2.7.8; 2.5.2 (Сени и OSX терминал, соответственно) - не импортирует модуль, или нужное время путешествия.
Или есть функция как:
def Print(s):
return sys.stdout.write(str(s))
Тогда и сейчас:
for i in range(10): # or `xrange` for python 2 version
Print(i)
Выходы:
0123456789
Есть два основных способа сделать это:
Печать без новой строки в Python 3.х
Добавлять ничего после того, как заявление распечатать и удалить '\П' с помощью конца=''` как:
>>> 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
Другой пример в цикле:
for i in range(1,10):
print(i, end='.')
Печать без новой строки в Python 2.х
Добавление трейлинг-запятая говорит, что после печати игнор \п
.
>>> print "hello",; print" world"
hello world
Другой пример в цикле:
for i in range(1,10):
print "{} .".format(i),
Надеюсь, что это поможет вам. Вы можете посетить этот ссылка .