On 2016-03-08 00:22, BartC wrote:
On 07/03/2016 23:40, Chris Angelico wrote:
On Tue, Mar 8, 2016 at 9:39 AM, BartC <b...@freeuk.com> wrote:

I'm using it because this kind of file reading in Python is a mess. If I do
a read, will I get a string, a byte sequence object, a byte-array, or
array-array, or what?

Uhh.... you'll get either a text string or a byte string, depending on
whether you opened the file as text or binary. Where's the mess?

(Is a byte string the same as a byte array? Is a byte array the same as
an array.array? If I remove this line from my code, where 'data' has
just been read from a file:

     data=array.array('B',data)

then it still works - Python 3. But not on Python 2. If I do .read on a
binary file I get a byte string in Python 3, but a string in Python 2.
That sort of mess.

In Python 2, an unmarked string literal _is_ a bytestring; in Python 3, an unmarked string literal is Unicode.



And how do I write that deceptively simple header on the output file
without array.array because I tried all sorts:

     f = open(file+".ppm", "wb")
     s="P6\n%d %d\n255\n" % (hdr.width, hdr.height)
     sbytes=array.array('B',list(map(ord,s)))
     f.write(sbytes)

You don't need to use array.array:

    sbytes = bytes(map(ord, s))

In Python 3.5, you can use '%' with a bytestring:

    s = b"P6\n%d %d\n255\n" % (hdr.width, hdr.height)

[snip]

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to