In python, if I say
print 'h'
I get the letter h and a newline. If I say
print 'h',
I get the letter h and no newline. If I say
print 'h',
print 'm',
I get the letter h, a space, and the letter m. How can I prevent Python from printing the space?
The print statements are different iterations of the same loop so I can't just use the + operator.
This question is related to
python
printing
formatting
python-2.x
sys.stdout.write
is (in Python 2) the only robust solution. Python 2 printing is insane. Consider this code:
print "a",
print "b",
This will print a b
, leading you to suspect that it is printing a trailing space. But this is not correct. Try this instead:
print "a",
sys.stdout.write("0")
print "b",
This will print a0b
. How do you explain that? Where have the spaces gone?
I still can't quite make out what's really going on here. Could somebody look over my best guess:
My attempt at deducing the rules when you have a trailing ,
on your print
:
First, let's assume that print ,
(in Python 2) doesn't print any whitespace (spaces nor newlines).
Python 2 does, however, pay attention to how you are printing - are you using print
, or sys.stdout.write
, or something else? If you make two consecutive calls to print
, then Python will insist on putting in a space in between the two.
print('''first line \
second line''')
it will produce
first line second line
Greg is right-- you can use sys.stdout.write
Perhaps, though, you should consider refactoring your algorithm to accumulate a list of <whatevers> and then
lst = ['h', 'm']
print "".join(lst)
print("{0}{1}{2}".format(a, b, c))
Regain control of your console! Simply:
from __past__ import printf
where __past__.py
contains:
import sys
def printf(fmt, *varargs):
sys.stdout.write(fmt % varargs)
then:
>>> 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
>>>
Bonus extra: If you don't like print >> f, ...
, you can extending this caper to fprintf(f, ...).
For completeness, one other way is to clear the softspace value after performing the write.
import sys
print "hello",
sys.stdout.softspace=0
print "world",
print "!"
prints helloworld !
Using stdout.write() is probably more convenient for most cases though.
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
But really, you should use sys.stdout.write
directly.
print("{0}{1}{2}".format(a, b, c))
This may look stupid, but seems to be the simplest:
print 'h',
print '\bm'
For completeness, one other way is to clear the softspace value after performing the write.
import sys
print "hello",
sys.stdout.softspace=0
print "world",
print "!"
prints helloworld !
Using stdout.write() is probably more convenient for most cases though.
In Python 3, use
print('h', end='')
to suppress the endline terminator, and
print('a', 'b', 'c', sep='')
to suppress the whitespace separator between items. See the documentation for print
For completeness, one other way is to clear the softspace value after performing the write.
import sys
print "hello",
sys.stdout.softspace=0
print "world",
print "!"
prints helloworld !
Using stdout.write() is probably more convenient for most cases though.
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
But really, you should use sys.stdout.write
directly.
Greg is right-- you can use sys.stdout.write
Perhaps, though, you should consider refactoring your algorithm to accumulate a list of <whatevers> and then
lst = ['h', 'm']
print "".join(lst)
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
But really, you should use sys.stdout.write
directly.
Greg is right-- you can use sys.stdout.write
Perhaps, though, you should consider refactoring your algorithm to accumulate a list of <whatevers> and then
lst = ['h', 'm']
print "".join(lst)
Or use a +
, i.e.:
>>> print 'me'+'no'+'likee'+'spacees'+'pls'
menolikeespaceespls
Just make sure all are concatenate-able objects.
For completeness, one other way is to clear the softspace value after performing the write.
import sys
print "hello",
sys.stdout.softspace=0
print "world",
print "!"
prints helloworld !
Using stdout.write() is probably more convenient for most cases though.
Or use a +
, i.e.:
>>> print 'me'+'no'+'likee'+'spacees'+'pls'
menolikeespaceespls
Just make sure all are concatenate-able objects.
In Python 3, use
print('h', end='')
to suppress the endline terminator, and
print('a', 'b', 'c', sep='')
to suppress the whitespace separator between items. See the documentation for print
I am not adding a new answer. I am just putting the best marked answer in a better format.
I can see that the best answer by rating is using sys.stdout.write(someString)
. You can try this out:
import sys
Print = sys.stdout.write
Print("Hello")
Print("World")
will yield:
HelloWorld
That is all.
You can use print like the printf function in C.
e.g.
print "%s%s" % (x, y)
sys.stdout.write
is (in Python 2) the only robust solution. Python 2 printing is insane. Consider this code:
print "a",
print "b",
This will print a b
, leading you to suspect that it is printing a trailing space. But this is not correct. Try this instead:
print "a",
sys.stdout.write("0")
print "b",
This will print a0b
. How do you explain that? Where have the spaces gone?
I still can't quite make out what's really going on here. Could somebody look over my best guess:
My attempt at deducing the rules when you have a trailing ,
on your print
:
First, let's assume that print ,
(in Python 2) doesn't print any whitespace (spaces nor newlines).
Python 2 does, however, pay attention to how you are printing - are you using print
, or sys.stdout.write
, or something else? If you make two consecutive calls to print
, then Python will insist on putting in a space in between the two.
Or use a +
, i.e.:
>>> print 'me'+'no'+'likee'+'spacees'+'pls'
menolikeespaceespls
Just make sure all are concatenate-able objects.
In Python 3, use
print('h', end='')
to suppress the endline terminator, and
print('a', 'b', 'c', sep='')
to suppress the whitespace separator between items. See the documentation for print
In 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
>>>
So using print_function from __future__ you can set explicitly the sep and end parameteres of print function.
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
But really, you should use sys.stdout.write
directly.
Greg is right-- you can use sys.stdout.write
Perhaps, though, you should consider refactoring your algorithm to accumulate a list of <whatevers> and then
lst = ['h', 'm']
print "".join(lst)
import sys
a=raw_input()
for i in range(0,len(a)):
sys.stdout.write(a[i])
Regain control of your console! Simply:
from __past__ import printf
where __past__.py
contains:
import sys
def printf(fmt, *varargs):
sys.stdout.write(fmt % varargs)
then:
>>> 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
>>>
Bonus extra: If you don't like print >> f, ...
, you can extending this caper to fprintf(f, ...).
I am not adding a new answer. I am just putting the best marked answer in a better format.
I can see that the best answer by rating is using sys.stdout.write(someString)
. You can try this out:
import sys
Print = sys.stdout.write
Print("Hello")
Print("World")
will yield:
HelloWorld
That is all.
This may look stupid, but seems to be the simplest:
print 'h',
print '\bm'
print('''first line \
second line''')
it will produce
first line second line
In 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
>>>
So using print_function from __future__ you can set explicitly the sep and end parameteres of print function.
You can use print like the printf function in C.
e.g.
print "%s%s" % (x, y)
import sys
a=raw_input()
for i in range(0,len(a)):
sys.stdout.write(a[i])
Or use a +
, i.e.:
>>> print 'me'+'no'+'likee'+'spacees'+'pls'
menolikeespaceespls
Just make sure all are concatenate-able objects.
Source: Stackoverflow.com