Checking for EOF in stream
Gabriel Genellina
gagsl-py at yahoo.com.ar
Mon Feb 19 20:50:25 EST 2007
En Mon, 19 Feb 2007 21:50:11 -0300, GiBo <gibo at gentlemail.com> escribió:
> Grant Edwards wrote:
>> On 2007-02-19, GiBo <gibo at gentlemail.com> wrote:
>>>
>>> Classic situation - I have to process an input stream of unknown length
>>> until a I reach its end (EOF, End Of File). How do I check for EOF? The
>>> input stream can be anything from opened file through sys.stdin to a
>>> network socket. And it's binary and potentially huge (gigabytes), thus
>>> "for line in stream.readlines()" isn't really a way to go.
>>>
>>> For now I have roughly:
>>>
>>> stream = sys.stdin
>>> while True:
>>> data = stream.read(1024)
>> if len(data) == 0:
>> break #EOF
>>> process_data(data)
>
> Right, not a big difference though. Isn't there a cleaner / more
> intuitive way? Like using some wrapper objects around the streams or
> something?
Read the documentation... For a true file object:
read([size]) ... An empty string is returned when EOF is encountered
immediately.
All the other "file-like" objects (like StringIO, socket.makefile, etc)
maintain this behavior.
So this is the way to check for EOF. If you don't like how it was spelled,
try this:
if data=="": break
If your data is made of lines of text, you can use the file as its own
iterator, yielding lines:
for line in stream:
process_line(line)
--
Gabriel Genellina
More information about the Python-list
mailing list