Как сохранить печать Python от добавления новых строк или пробелов? [дубликат]


этот вопрос уже есть ответ здесь:

в python, если я скажу

print 'h'

Я получаю букву h и новую строку. Если я скажу

print 'h',

буква ч, а не строки. Если я скажу

print 'h',
print 'm',

Я получаю букву h, пробел и буква М. Как я могу запретить Python печатать пробел?

операторы печати-это разные итерации одного и того же цикла, поэтому я не могу просто использовать оператор+.

16 216

16 ответов:

вы можете использовать:

sys.stdout.write('h')
sys.stdout.write('m')

просто комментарий. В Python 3, вы будете использовать

print('h', end='')

чтобы подавить Терминатор конечной линии, и

print('a', 'b', 'c', sep='')

для подавления разделителя пробелов между элементами.

Грег прав-вы можете использовать sys.стандартный вывод.пиши

возможно, однако, вы должны рассмотреть возможность рефакторинга вашего алгоритма для накопления списка , а затем

lst = ['h', 'm']
print  "".join(lst)

или использовать +, например:

>>> print 'me'+'no'+'likee'+'spacees'+'pls'
menolikeespaceespls

просто убедитесь, что все объекты объединяются.

Python 2.5.2 (r252:60911, Sep 27 2008, 07:03:14)
[GCC 4.3.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print "hello",; print "there"
hello there
>>> print "hello",; sys.stdout.softspace=False; print "there"
hellothere

но на самом деле, вы должны использовать sys.stdout.write напрямую.

для полноты еще один способ-очистить значение softspace после выполнения записи.

import sys
print "hello",
sys.stdout.softspace=0
print "world",
print "!"

печать helloworld !

С помощью stdout.однако write (), вероятно, более удобен для большинства случаев.

Это может выглядеть глупо, но, кажется, самое простое:

    print 'h',
    print '\bm'

восстановить контроль над вашей консоли! Просто:

from __past__ import printf

здесь __past__.py содержит:

import sys
def printf(fmt, *varargs):
    sys.stdout.write(fmt % varargs)

затем:

>>> printf("Hello, world!\n")
Hello, world!
>>> printf("%d %d %d\n", 0, 1, 42)
0 1 42
>>> printf('a'); printf('b'); printf('c'); printf('\n')
abc
>>>

бонус дополнительно: если вам не нравится print >> f, ..., вы можете расширить этот Капер на fprintf (f, ...).

Я не добавляю новый ответ. Я просто ставлю лучший отмеченный ответ в лучшем формате. Я вижу, что лучший ответ по рейтингу-это использование sys.stdout.write(someString). Вы можете попробовать это:

    import sys
    Print = sys.stdout.write
    Print("Hello")
    Print("World")

даст:

HelloWorld

вот и все.

в python 2.6:

>>> print 'h','m','h'
h m h
>>> from __future__ import print_function
>>> print('h',end='')
h>>> print('h',end='');print('m',end='');print('h',end='')
hmh>>>
>>> print('h','m','h',sep='');
hmh
>>>

таким образом, используя print_function из __future__ вы можете явно установить sep и конец параметры функции печати.

вы можете использовать печать, как функция printf в C.

например

печать "%s%s " % (x, y)

print("{0}{1}{2}".format(a, b, c))

sys.stdout.write является (в Python 2) единственным надежным решением. Печать Python 2-это безумие. Рассмотрим этот код:

print "a",
print "b",

выводит a b, что приводит вас к подозрению, что он печатает конечное пространство. Но это не совсем так. Попробуйте вместо этого:

print "a",
sys.stdout.write("0")
print "b",

выводит a0b. Как ты это объяснишь? куда делись пробелы?

Я все еще не могу понять, что здесь происходит на самом деле. Мог кто-нибудь посмотрите на мое лучшее предположение:

моя попытка вывести правила, когда у вас есть трейлинг , на print:

во-первых, давайте предположим, что print , (в Python 2) не печатает пробелы (пробелы , ни переводы строк).

Python 2, однако, обратите внимание на то, как вы печатаете - вы используете print или sys.stdout.write, или что-то еще? Если вы сделаете два подряд звонки print, тогда Python будет настаивать на том, чтобы поместить пространство между ними.

import sys
a=raw_input()
for i in range(0,len(a)):
       sys.stdout.write(a[i])
print('''first line \
second line''')

он будет производить

первая строка вторая строка

У меня была такая же проблема, как только я хотел прочитать некоторые цифры из файла. Я решил это так:

f = open('file.txt', 'r')
for line in f:   
    print(str.split(line)[0])