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

вопрос в заголовке.

Я хотел бы сделать это в 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.

25 ответов


общие

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, Вы можете do:

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: Как печатать без 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
>>> 

Примечание: заголовок этого вопроса раньше был чем-то вроде "как печатать на 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
..........

используйте функцию печати python3-style для 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

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 style

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 для сепаратора.


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


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

>>> import functools

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

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

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


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

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


вы можете сделать это с помощью


код для Python 3.6.1

for i in range(0,10): print('.' , 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')

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

 for i in range (0,5):
   print "hi"

 OUTPUT:
    hi
    hi
    hi
    hi
    hi

но вы хотите, чтобы он печатался так: hi hi hi hi hi hi да???? просто добавьте запятую после печати "hi"

пример:

for i in range (0,5): print "hi", OUTPUT: hi hi hi hi hi


в Python 3 печать является функцией. Когда вы звоните

print ('hello world')

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

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

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

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

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

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


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

#!usr/bin/python

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

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


@lenooh удовлетворил мой запрос. Я обнаружил эту статью во время поиска "python suppress newline". Я использую IDLE3 на Raspberry Pi для разработки Python 3.2 для шпатлевки. Я хотел создать индикатор выполнения в командной строке PuTTY. Я не хотел, чтобы страница прокручивалась. Я хотел горизонтальную линию, чтобы повторно заверить пользователя в том, что программа не остановилась и не была отправлена на обед по веселому бесконечному циклу - в качестве просьбы " оставить меня в покое, я все делаю хорошо, но это может занять некоторое время.'интерактивное сообщение - как индикатор выполнения в тексте.

на print('Skimming for', search_string, '\b! .001', end='') инициализирует сообщение, готовясь к следующей записи экрана, которая будет печатать три backspaces как RUB rubout, а затем точку, стирая '001' и расширяя строку периодов. После search_string попугаи пользовательский ввод,\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'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')

прогресс-бар мясо в sys.stdout.write('\b\b\b.'+format(page, '03')) линии. Во-первых, чтобы стереть слева, он создает резервную копию курсора над тремя цифровыми символами с помощью '\б\б\б' как ⌫ ⌫ убийства⌫ и капли нового периода чтобы добавить прогресс бар длина. Затем он записывает три цифры страницы, до которой до сих пор дошел. Потому что 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 не чтит backspace как RUB rubout, а вместо этого печатает пробел, создавая видимый список фракций.

-(o=8> wiz


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

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

Я решил ее делать:

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


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

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

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

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


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

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

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


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

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


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

Python 3

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

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


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

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

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


есть два основных способа сделать это:

печать без новой строки в Python 3.x

ничего не добавлять после инструкции печати и удалить '\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),

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