[ALUG] Python question about reading files

Chris G cl at isbd.net
Tue Nov 6 19:01:13 GMT 2007


On Tue, Nov 06, 2007 at 04:20:05PM +0000, Richard Lewis wrote:
> At Tue, 6 Nov 2007 15:54:35 +0000,
> Chris G wrote:
> > 
> > Are there any Python people here?
> > 
> Yes, loads!
> 
> > How do I do the equivalent of the C below in Python :-
> > 
> >     while ( (str = read(file)) != NULL)
> >     {
> >         do something;
> >     }
> > 
> Err, my C isn't that hot, but how do this do anything other than put
> all the contents of the file in str? Or does it read a line at a time
> in some non-obvious way?

OK, the code wasn't perfect, there need to be more parameters to
read() so that it only reads a bit of the file at a time.

> > 
> > I can read the data OK, i.e. I have opened the file and I can
> > successfully read from the file with the line:-
> > 
> >     tagNum = tlvFile.read(3)
> > 
> > but I don't see how to make that part of a for/while loop that exits
> > at the end of the file.  I can't use an iterator because the file is
> > read in variable length chunks whose length depends on context.
> > 
> You should have a look at:
> 
> http://docs.python.org/lib/bltin-file-objects.html
> 
> If you /really/ want to read in chunks of three bytes, you could do
> this:
> 
> chunk = tlvFile.read(3)
> while chunk != "":
>   print chunk
>   chunk = tlvFile.read(3)
> 
That's what I was trying to avoid, those two reads.


> Otherwise, why not just read lines and use the free iterator:
> 
> for line in tlvFile.readlines():
>   print line
> 
Because the file doesn't have lines, it's just a stream of bytes.

-- 
Chris Green



More information about the main mailing list