Как печатать без новой строки или пробела?
Вопрос находится в заголовке.
Я хотел бы сделать это в python. Что я хотел бы сделать в этом примере в 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
.
Ответы
Ответ 1
Общий путь
import sys
sys.stdout.write('.')
Вам также может потребоваться позвонить
sys.stdout.flush()
для обеспечения немедленного stdout
.
Python 2. 6+
Из Python 2.6 вы можете импортировать функцию print
из Python 3:
from __future__ import print_function
Это позволяет вам использовать решение Python 3 ниже.
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()
с вызовом sys.stdout.flush()
.
источники
- https://docs.python.org/2/library/functions.html#print
- https://docs.python.org/2/library/__future__.html
- https://docs.python.org/3/library/functions.html#print
Ответ 2
Это должно быть так просто, как описано в этой ссылке Guido Van Rossum:
Re: Как печатать без c/r?
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
>>>
Ответ 3
Примечание. Название этого вопроса раньше было чем-то вроде "Как напечатать f в 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
..........
Ответ 4
Используйте функцию печати в стиле python3 для python2.6 + (также будет разбита любая существующая команда печати с ключевыми словами в том же файле.)
# 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('hello %s', 'world')
printf('%i %f', 10, 3.14)
#hello world10 3.140000
Ответ 5
Как печатать на одной строке:
import sys
for i in xrange(0,10):
sys.stdout.write(".")
sys.stdout.flush()
Ответ 6
В новой функции (как и у Python 3.0) print
есть необязательный параметр end
, который позволяет изменять символ окончания. Там также sep
для разделителя.
Ответ 7
Использование functools.partial для создания новой функции, называемой printf
>>> import functools
>>> printf = functools.partial(print, end="")
>>> printf("Hello world\n")
Hello world
Простой способ обернуть функцию параметрами по умолчанию.
Ответ 8
Вы можете просто добавить ,
в конце функции print
, чтобы он не печатался в новой строке.
Ответ 9
print
Функция в python автоматически создает новую строку. Вы можете попробовать:
print("Hello World", end="")
Ответ 10
Вы можете сделать это с помощью end
аргумента print
. В Python3 range()
возвращает итератор, а xrange()
не существует.
for i in range(10): print('.', end='')
Ответ 11
Вы можете попробовать:
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')
Ответ 12
В Python 3 печать - это функция. Когда вы вызываете
print ('hello world')
Python переводит его на
print ('hello world', end = '\n')
Вы можете изменить конец на все, что хотите.
print ('hello world', end = '')
print ('hello world', end = ' ')
Ответ 13
Код для Python 3.6.1
for i in range(0,10): print('.' , end="")
Выход
..........
>>>
Ответ 14
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('.')
если после каждой печати в памяти появляется дополнительное пространство, в 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') `
Ответ 15
В последнее время у меня была такая же проблема.
я решил это, выполнив:
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...
HTH
Ответ 16
Вы можете сделать то же самое в python3 следующим образом:
#!usr/bin/python
i = 0
while i<10 :
print('.',end='')
i = i+1
и выполните его с помощью python filename.py
или python3 filename.py
Ответ 17
Вы заметите, что все приведенные выше ответы верны. Но я хотел сделать ярлык, чтобы всегда писать параметр "end = '" в конце.
Вы можете определить такую функцию, как
def Print(*args,sep='',end='',file=None,flush=False):
print(*args,sep=sep,end=end,file=file,flush=flush)
Он принимает все количество параметров. Даже он принимает все остальные параметры, такие как файл, флеш и т.д. И с тем же именем.
Ответ 18
@lenooh удовлетворил мой запрос. Я обнаружил эту статью во время поиска "python suppress newline". Я использую IDLE3 на малине Pi для разработки Python 3.2 для PuTTY. Я хотел создать индикатор выполнения в командной строке PuTTY. Я не хотел, чтобы страница прокручивалась. Я хотел, чтобы горизонтальная линия снова заставляла пользователя избавляться от того, что программа не остановилась и не была отправлена на обед в веселой бесконечной петле - в качестве мольбы: "Оставь меня в покое, я в порядке, но это может занять некоторое время". интерактивное сообщение - как индикатор выполнения в тексте.
print('Skimming for', search_string, '\b! .001', end='')
инициализирует сообщение, готовясь к следующей записи на экране, которая будет печатать три пробела как ⌫⌫⌫ rubout, а затем период, вытирая "001" и расширяя линию периодов. После ввода пользователем search_string
parrots user \b!
обрезает восклицательный знак моего текста search_string
назад в пространстве, которое print()
в противном случае заставляет правильно помещать пунктуацию. Это сопровождалось пробелом и первой "точкой" "бара прогресса", который я имитирую. Ненужно, чтобы сообщение также загружалось с номером страницы (отформатированным до длины три с ведущими нулями), чтобы уведомить пользователя о ходе обработки и который также будет отражать количество периодов, которые мы позже построим на вправо.
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 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')
Мясо индикатора выполнения находится в строке sys.stdout.write('\b\b\b.'+format(page, '03'))
. Во-первых, чтобы стереть влево, он поддерживает курсор над тремя числовыми символами с "\ b\b\b" как ⌫⌫⌫ rubout и сбрасывает новый период для добавления к длине строки выполнения. Затем он записывает три цифры страницы, к которой она продвинулась до сих пор. Поскольку sys.stdout.write()
ожидает завершения полного буфера или выходного канала, sys.stdout.flush()
заставляет немедленную запись. sys.stdout.flush()
встроен в конец print()
, который обходит с помощью print(txt, end='' )
. Затем код циклически выполняет свои трудоемкие операции с интенсивным временем, пока он больше ничего не печатает, пока он не вернется сюда, чтобы стереть три цифры назад, добавить период и снова записать три цифры, увеличивая.
Три разряда, протертые и переписанные, отнюдь не нужны - это просто расцвет, который иллюстрирует sys.stdout.write()
по сравнению с print()
. Вы так же легко можете просто занять период и забыть три необычных обратных слэша-b ⌫ backspaces (конечно же, не писать отформатированные страницы), просто распечатывая полосу периодов дольше на каждый раз через - без пробелов или новых строк, используя только sys.stdout.write('.'); sys.stdout.flush()
.
Обратите внимание, что оболочка Python Raspberry Pi IDLE3 Python не выполняет backspace как ⌫ rubout, а вместо этого печатает пробел, создавая вместо этого явный список фракций.
- (o = 8 > wiz
Ответ 19
вы хотите напечатать что-то в цикле справа, но вы не хотите, чтобы он печатался в новой строке каждый раз.
например:
for i in range (0,5):
print "hi"
OUTPUT:
hi
hi
hi
hi
hi
но вы хотите, чтобы он печатался следующим образом:
привет привет привет привет привет правой????
просто добавьте запятую после печати "привет"
Пример:
for i in range (0,5):
print "hi",
OUTPUT:
hi hi hi hi hi
Ответ 20
Многие из этих ответов кажутся немного сложными. В Python 3.X вы просто это делаете,
print(<expr>, <expr>, ..., <expr>, end=" ")
Значение по умолчанию для конца - "\n". Мы просто меняем его на пробел или вы также можете использовать end = "".
Ответ 21
for i in xrange(0,10): print '.',
Это будет работать для вас. здесь запятая (,) важна после печати. Получил помощь от: http://freecodeszone.blogspot.in/2016/11/how-to-print-in-python-without-newline.html
Ответ 22
for i in xrange(0,10): print '\b.',
Это работало как с 2.7.8, так и с 2.5.2 (Canopy и OSX terminal соответственно) - не требуется импорт модулей или время.
Ответ 23
Или используйте функцию:
def Print(s):
return sys.stdout.write(str(s))
То теперь:
for i in range(10): # or 'xrange' for python 2 version
Print(i)
Выходы:
0123456789
Ответ 24
Вот общий способ печати без вставки новой строки.
Python 3
for i in range(10):
print('.',end = '')
В Python 3 очень просто реализовать
Ответ 25
в питоне 3: print ('.', end = "")
Ответ 26
Есть много способов решить эту проблему. Самый простой способ это:
Python 3.x
>>> for i in range(0,10): print('.',end='')
..........
Python 2. 6+
>>> from __future__ import print_function
>>> for i in xrange(0,10): print('.',end='')
...........
Однако это может вызвать проблемы с буфером, которые можно исправить, добавив flush=True
к оператору print
в Python 3.x или в любой версии, запустив sys.stdout.flush()
(конечно, сначала запустив import sys
) чтобы убедиться, что он отображается правильно.
Кроме того, вы можете запустить sys.stdout.write('.')
Чтобы напрямую добавить его в поток.
Ответ 27
Есть два общих способа сделать это:
Печать без новой строки в Python 3.x
Не добавляйте ничего после инструкции print и удалите '\n', используя end=''
as:
>>> 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.x
Добавление конечной запятой говорит, что после печати игнорировать \n
.
>>> print "hello",; print" world"
hello world
Другой пример в цикле:
for i in range(1,10):
print "{} .".format(i),
Надеюсь, что это поможет вам. Вы можете посетить эту ссылку.
Ответ 28
... вам не нужно импортировать какую-либо библиотеку. Просто используйте символ удаления:
BS=u'\0008' # the unicode for "delete" character
for i in range(10):print(BS+"."),
это удаляет новую строку и пространство (^ _ ^) *
Ответ 29
Я понимаю, что запятая подавила пространство
3 точки - это реликты интерпретатора
для я в диапазоне (0,10): напечатать ".\n", ... , , , , , , , , , .
Ответ 30
Привет, фамилия lastname!
при печати
если имя является первым, а b - фамилия, но при печати имени добавляется пробел, поэтому
a="Firstname"
b="Lastname"
print("Hello",a,b+"!")