Как печатать без новой строки или пробела?

Вопрос находится в заголовке.

Я хотел бы сделать это в . Что я хотел бы сделать в этом примере в 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.

1461
задан Andrea Ambu 29 янв. '09 в 23:58
источник поделиться
28 ответов

Общий путь

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

2010
ответ дан codelogic 30 янв. '09 в 0:01
источник поделиться

Это должно быть так просто, как описано в этой ссылке 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
>>> 
276
ответ дан KDP 27 июля '12 в 13:09
источник поделиться

Примечание. Название этого вопроса раньше было чем-то вроде "Как напечатать 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
..........
157
ответ дан Beau 30 янв. '09 в 0:24
источник поделиться

Используйте функцию печати в стиле 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
86
ответ дан k107 21 февр. '11 в 23:50
источник поделиться

Это не ответ на вопрос в названии, но это ответ о том, как печатать на одной строке:

import sys
for i in xrange(0,10):
   sys.stdout.write(".")
   sys.stdout.flush()
38
ответ дан lenooh 03 дек. '10 в 20:16
источник поделиться

В новой функции (как и у Python 3.0) print есть необязательный параметр end, который позволяет изменять символ окончания. Там также sep для разделителя.

23
ответ дан SilentGhost 30 янв. '09 в 0:07
источник поделиться

Вы можете просто добавить , в конце функции print, чтобы он не печатался в новой строке.

16
ответ дан user3763437 10 июля '14 в 22:45
источник поделиться

Использование functools.partial для создания новой функции, называемой printf

>>> import functools

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

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

Простой способ обернуть функцию параметрами по умолчанию.

14
ответ дан sohail288 17 июня '15 в 4:55
источник поделиться

print Функция в python автоматически создает новую строку. Вы можете попробовать:

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

14
ответ дан klee8_ 14 марта '17 в 22:17
источник поделиться

Вы можете сделать это с помощью end аргумента print. В Python3 range() возвращает итератор, а xrange() не существует.

for i in range(10): print('.', end='')
11
ответ дан Maxim 05 февр. '11 в 18:05
источник поделиться

Код для Python 3.6.1

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

Выход

..........
>>>
8
ответ дан Jasmohan 03 апр. '17 в 20:14
источник поделиться

Вы можете попробовать:

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')
7
ответ дан alvas 23 нояб. '15 в 15:03
источник поделиться

В Python 3 печать - это функция. Когда вы вызываете

print ('hello world')

Python переводит его на

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

Вы можете изменить конец на все, что хотите.

print ('hello world', end = '')
print ('hello world', end = ' ')
6
ответ дан Yaelle 10 июля '16 в 0:22
источник поделиться

вы хотите напечатать что-то в цикле справа, но вы не хотите, чтобы он печатался в новой строке каждый раз. например:

 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

5
ответ дан Bala.K 23 июля '15 в 17:18
источник поделиться

Вы можете сделать то же самое в python3 следующим образом:

#!usr/bin/python

i = 0
while i<10 :
    print('.',end='')
    i = i+1

и выполните его с помощью python filename.py или python3 filename.py

4
ответ дан Subbu 05 июля '13 в 20:37
источник поделиться

В последнее время у меня была такая же проблема.

я решил это, выполнив:

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

4
ответ дан ssgam 18 июня '12 в 6:39
источник поделиться

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') `
4
ответ дан n611x007 22 июля '15 в 20:09
источник поделиться
for i in xrange(0,10): print '.',

Это будет работать для вас. здесь запятая (,) важна после печати. Получил помощь от: http://freecodeszone.blogspot.in/2016/11/how-to-print-in-python-without-newline.html

4
ответ дан Shekhar 13 нояб. '16 в 15:28
источник поделиться

Вы заметите, что все приведенные выше ответы верны. Но я хотел сделать ярлык, чтобы всегда писать параметр "end = '" в конце.

Вы можете определить такую ​​функцию, как

def Print(*args,sep='',end='',file=None,flush=False):
    print(*args,sep=sep,end=end,file=file,flush=flush)

Он принимает все количество параметров. Даже он принимает все остальные параметры, такие как файл, флеш и т.д. И с тем же именем.

4
ответ дан Bikram Kumar 09 марта '17 в 8:54
источник поделиться

@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

4
ответ дан DisneyWizard 28 февр. '15 в 7:35
источник поделиться

Многие из этих ответов кажутся немного сложными. В Python 3.X вы просто это делаете,

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

Значение по умолчанию для конца - "\n". Мы просто меняем его на пробел или вы также можете использовать end = "".

3
ответ дан jarr 24 нояб. '15 в 21:46
источник поделиться
for i in xrange(0,10): print '\b.',

Это работало как с 2.7.8, так и с 2.5.2 (Canopy и OSX terminal соответственно) - не требуется импорт модулей или время.

2
ответ дан tyersome 18 окт. '14 в 23:13
источник поделиться

Вот общий способ печати без вставки новой строки.

Python 3

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

В Python 3 очень просто реализовать

1
ответ дан Steffi Keran Rani J 10 дек. '16 в 11:51
источник поделиться

Или используйте функцию:

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

То теперь:

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

Выходы:

0123456789
0
ответ дан U9-Forward 17 окт. '18 в 4:41
источник поделиться

Есть два общих способа сделать это:

Печать без новой строки в 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='-' 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),

Надеюсь, что это поможет вам. Вы можете посетить эту ссылку.

0
ответ дан Sushant 20 авг. '18 в 16:35
источник поделиться

... вам не нужно импортировать какую-либо библиотеку. Просто используйте символ удаления:

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

это удаляет новую строку и пространство (^ _ ^) *

0
ответ дан mchrgr2000 17 мая '17 в 7:01
источник поделиться

Я понимаю, что запятая подавила пространство 3 точки - это реликты интерпретатора

  

для я в диапазоне (0,10): напечатать ".\n",     ...     ,     ,     ,     ,     ,     ,     ,     ,     ,     .

  
-4
ответ дан BruceK 17 апр. '15 в 13:37
источник поделиться

Привет, фамилия lastname! при печати если имя является первым, а b - фамилия, но при печати имени добавляется пробел, поэтому

a="Firstname"
b="Lastname"
print("Hello",a,b+"!")
-4
ответ дан Jai Balaj 04 июля '17 в 19:53
источник поделиться

Другие вопросы по меткам