Using print with format to stdout generates unwanted space
Paul Watson
pwatson at redlinepy.com
Mon Jun 20 11:36:09 EDT 2005
Thanks for all replies.
Ok. I agree. While printf() does tightly control formatting in C, it does
not in Python. Using write() can be used to output with no changes to the
data.
"Tim Hoffman" <timh at zute.net> wrote in message
news:42b6bc99 at news.highway1.com.au...
> Hi Paul
>
> Based on your description of what you want to do, print is probably not
> the correct method of controlling output format. You should use write()
> method of the file handle to get unadulterated output.
>
> print is working as documented . From the Python 2.3 documentation,
> Section 6.6 The Print statement.
>
> "print evaluates each expression in turn and writes the resulting object
> to standard output (see below). If an object is not a string, it is first
> converted to a string using the rules for string conversions. The
> (resulting or original) string is then written. A space is written before
> each object is (converted and) written, unless the output system believes
> it is positioned at the beginning of a line. This is the case (1) when no
> characters have yet been written to standard output, (2) when the last
> character written to standard output is "\n", or (3) when the last write
> operation on standard output was not a print statement."
>
> As you can see a space char is written and is correct as per the docs.
>
> Rgds
>
> Tim
>
> Paul Watson wrote:
>> #!/usr/bin/env python
>>
>> # Using a print statement to stdout results in an
>> # unwanted space character being generated at the
>> # end of each print output. Same results on
>> # DOS/Windows and AIX.
>> #
>> # I need precise control over the bytes that are
>> # produced. Why is print doing this?
>> #
>> import sys
>>
>> # If this is a DOS/Windows platform, then put stdout
>> # into binary mode so that only the UNIX compatible newline
>> # will be generated.
>> #
>> try:
>> import msvcrt, os
>> msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
>> except:
>> print 'This is not an msvcrt platform.'
>> pass
>>
>> # Using print with newline suppressed generates a space at the
>> # end of each print statement.
>> #
>> for i in range(3):
>> print '%d,60,' % (i),
>> for j in range(10):
>> print '%d,' % (j),
>> print ''
>>
>> # Using a list and doing a join does not result in the space
>> # character being generated.
>> #
>> for i in range(3):
>> alist = []
>> alist.append('%d,60,' % (i))
>> for j in range(10):
>> alist.append('%d,' % (j))
>> print ''.join(alist)
>>
>> sys.exit(0)
More information about the Python-list
mailing list