Python 3.2 bug? Reading the last line of a file

MRAB python at mrabarnett.plus.com
Wed May 25 19:56:52 EDT 2011


On 26/05/2011 00:25, tkpmep at hotmail.com wrote:
> Thanks for the guidance - it was indeed an issue with reading in
> binary vs. text., and I do now succeed in reading the last line,
> except that I now seem unable to split it, as I demonstrate below.
> Here's what I get when I read the last line in text mode using 2.7.1
> and in binary mode using 3.2 respectively under IDLE:
>
> 2.7.1
> Name	31/12/2009	0	0	0
>
> 3.2
> b'Name\t31/12/2009\t0\t0\t0\r\n'
>
> if, under 2.7.1 I read the file in text mode and write
>>>> x = lastLine(fn)
> I can then cleanly split the line to get its contents
>>>> x.split('\t')
> ['Name', '31/12/2009', '0', '0', '0\n']
>
> but under 3.2, with its binary read, I get
>>>> x.split('\t')
> Traceback (most recent call last):
>    File "<pyshell#26>", line 1, in<module>
>      x.split('\t')
> TypeError: Type str doesn't support the buffer API
>
> If I remove the '\t', the split now works and I get a list of bytes
> literals
>>>> x.split()
> [b'Name', b'31/12/2009', b'0', b'0', b'0']
>
> Looking through the docs did not clarify my understanding of the
> issue. Why can I not split on '\t' when reading in binary mode?
>
x.split('\t') tries to split on '\t', a string (str), but x is a
bytestring (bytes).

Do x.split(b'\t') instead.



More information about the Python-list mailing list