while c = f.read(1)

Reinhold Birkenfeld reinhold-birkenfeld-nospam at wolke7.net
Sun Aug 21 05:43:07 EDT 2005


John Machin wrote:

> ... AND it's about time that list is updated to include False explicitly 
>   -- save nitpicking arguments about whether False is covered by 
> "numeric zero of all types" :-)

Done.

>> If I try:
>> 
>>   f = open("blah.txt", "r")
>>   while (c = f.read(1)) != '':
>>       # ... work on c
>> 
>> I get a syntax error also. :(
>> 
>> Is this related to Python's expression vs. statement syntactic
>> separation? How can I be write this code more nicely?
>> 
>> Thanks
>> 
> 
> How about
>     for c in f.read():
> ?
> Note that this reads the whole file into memory (changing \r\n to \n on 
> Windows) ... performance-wise for large files you've spent some memory 
> but clawed back the rather large CPU time spent doing f.read(1) once per 
> character. The "more nicely" factor improves outasight, IMHO.
> 
> Mild curiosity: what are you doing processing one character at a time 
> that can't be done with a built-in function, a standard module, or a 
> 3rd-party module?

Don't forget

for line in f:
    for c in line:
        # do stuff

Reinhold



More information about the Python-list mailing list