file position *tell()* works different

Richie Hindle richie at entrian.com
Fri Sep 19 18:35:15 CEST 2003


[Peter]
> I wonder if the function *tell()* is not correctly implemented under win32.

[Tim, quoting the standard]
> For a text stream, its file position indicator contains
> unspecified information, usable by the fseek function for returning
> the file position indicator for the stream to its position at the
> time of the ftell call

It still doesn't seem to work as specified:

------------------------------ peter.py ------------------------------

# Open the file in text mode, read a line, and store the position.
fp = file('test_data.txt', 'rt')
line = fp.readline()
storedPosition = fp.tell()
print 'Line: %r, file pointer after read: %d' % (line, storedPosition)

# Read some more and print it.
print 'Read another line from this position: %r' % fp.readline()

# Now seek back and read the same line again.
fp.seek(storedPosition)
print 'Another read from the same position: %r' % fp.readline()

----------------------------------------------------------------------

This prints:

Line: '0123456789\n', file pointer after read: 8
Read another line from this position: '0123456789\n'
Another read from the same position: '89\n'

I'd expect doing readline/tell/readline/seek/readline to read the same
line the second two times.  And however you implement tell and seek, a
tell value of 8 after reading 11 bytes looks pretty weird.

I'd write the same code in C if I had the time, so at least we could be
*sure* we can blame Microsoft.  8-)

-- 
Richie Hindle
richie at entrian.com>






More information about the Python-list mailing list