On 2016-07-04 16:48, Marco Buttu wrote:
Hi all,
if I open a file in text mode, do you know why file.seek() returns the
number of bytes, and file.tell() takes the number of bytes? I was
expecting the number of characters, like write() does:
>>> f = open('myfile', 'w')
>>> f.write('aè')
2
It seems to me not consistent, and maybe could also be error prone:
>>> f.seek(2)
2
>>> f.write('c')
1
>>> f.close()
>>> open('myfile').read()
...
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3...
Some encodings, such as UTF-8, use a variable number of bytes per
character (codepoint, actually), so in order to seek to a certain
character position you would need to read from a known position, e.g.
the start of the file, until you reached the desired place.
Most of the time you're seeking to a position that was previously
returned by tell anyway.
I think it's a case of "practicality beats purity".
--
https://mail.python.org/mailman/listinfo/python-list