Iterating over a binary file
Sambo
samirw at connection.com
Tue Jan 6 23:18:12 EST 2004
Paul Rubin wrote:
> Ville Vainio <ville.vainio at spamster_tut_remove.fi> writes:
>
>
>>Paul Rubin <http://phr.cx@NOSPAM.invalid> writes:
>>
>>
>>>>The above code works, but I don't like making two read() calls. Any
>>>>way to avoid it, or a more elegant syntax? Thanks.
>>>>
>>>You can make it even uglier:
>>>
>>> f = file(filename, 'rb')
>>> while 1:
>>> data = f.read(1024)
>>> if len(data) <= 0:
>>> break
>>> someobj.update(data)
>>> f.close()
>>>
>>>There's been proposals around to add an assignment-expression operator
>>>like in C, so you could say something like
>>>
>>> f = file(filename, 'rb')
>>> while len(data := f.read(1024)) > 0:
>>> someobj.update(data)
>>> f.close()
>>>
>>It's funny, but I find the first version much more readable than the
>>second one. Especially if I consciously forget the "do lots of stuff
>>in condition part of while" indoctrination from C. If there is lots of
>>stuff in while you have to stare at it a bit more, and it becomes
>>"idiomatic", something you learn, perhaps even cookbook stuff, instead
>>of obvious-as-such.
>>
>
> Idioms exist because they're useful, and there's already plenty of
> them in Python, like ''.join(stringlist) or "for i in xrange(n)" etc.
>
> Maybe the condition in the while statement makes that statement twice
> as hard to read. However, the example as a whole can still be easier,
> simply because it's shorter.
>
> Version 1:
>
> Statement Reading difficulty
> ========= ==================
>
> f = file(filename, 'rb') 1
> while 1: 1
> data = f.read(1024) 1
> if len(data) <= 0: 1
> break 1
> someobj.update(data) 1
> f.close() 1
>
> Total reading difficulty: 7
>
> Now the second version:
>
> Statement Reading difficulty
> ========= ==================
>
> f = file(filename, 'rb') 1
> while len(data := f.read(1024)) > 0: 2
> someobj.update(data) 1
> f.close() 1
>
>
> Total reading difficulty: 5
>
> I got through college on a version of this reasoning. I was a math
> major. I had friends studying history and literature who said "that's
> a hard subject", but I thought they were crazy. But in a normal math
> class, there's one textbook that you use for the whole semester, and
> you cover maybe half the chapters in it. I was able to keep up. But
> in a literature course, you usually have to read a different entire
> book from cover to cover EVERY WEEK. I took a couple classes like
> that and barely survived. Yes, it takes a lot more effort to read a
> page of a math book than a page of a novel. When you compare the
> total reading load though, math was a much easier major than
> literature or history.
>
> It's the same with programs. I'd rather read 5 lines of tight code
> that each actually does something, than 3 pages of loose code (the
> kind that's usually written in Java) that spastically meanders trying
> to do the same thing, even if the individual loose lines are easier to
> read than the tight lines.
>
I would say, that depends on the persons competency in a given language.
Naturally once you are writing long/large programs it is better to have tight
code, but for a newby it is too much to translate at once.
While I consider myself expert in "C" , I am still learning "C++".
That does not mean a language has to lack the capability.
Then again how large a program can you or would you want to write with python?
Cheers, Sam.
More information about the Python-list
mailing list