[Python-3000] iostack, second revision
Nick Coghlan
ncoghlan at gmail.com
Fri Sep 8 12:31:48 CEST 2006
[Guido]
>> Why not use tell() and seek() instead of get_pointer() and
>> set_pointer()?
[tomer]
> because, at least the way i see it, seek and tell are byte-oriented,
> while the upper layers of the stack may be objects-oriented
> (including, for instance, characters, struct records, or pickled objects),
> so pointers would be a vector of (byte-position, stateful object-layer info).
>
> pointers are different than mere byte-positions, so i thought streams
> should have a byte-level API, while the upper layers are more likely
> to work with "pointers".
seek() & tell() aren't necessarily byte-oriented, and a program can get itself
in trouble by treating them as if they are. Seeking to an arbitrary byte
position on a Windows text file can be a very bad idea :)
So -1 on using different names, but +1 on permitting different IO layers to
assign a different meaning to exactly what it is that seek() and tell() are
indexing.
With the IO layer doing a translation, I suggest that the seek/tell cookies
should be plain integers, so that doing f.seek(20) on a text file will seek to
the 20th character instead of the 20th byte. This approach is backwards
compatible with the current rule of 'for text files, arguments to seek() must
be previously returned from tell()' and Guido's desire that f.seek(0) always
seek to the beginning of the file.
>
> [Guido]
>> Seek should also support several special cases:
>> f.seek(0) seeks to the start of the file no matter what type is
>> otherwise used for pointers ("seek cookies" ?), f.seek(0, 1) is a
>> no-op, f.seek(0, 2) seeks to EOF.
>
> [Antoine]
>> Perhaps it would be good to drop those magic numbers (0, 1, 2) for
>> seek() ? They don't really help readibility except perhaps for people
>> who still do a lot of C ;)
Since I've been playing with string methods lately, I believe a natural name
for the 'seek from the end' version is f.rseek(0). And someone else suggested
f.seekby(0) as a reasonable name for relative seeking.
f.seek(0) # Go to beginning
f.seekby(0) # Stay at current position
f.rseek(0) # Go to end
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
---------------------------------------------------------------
http://www.boredomandlaziness.org
More information about the Python-3000
mailing list