[Tutor] Nested, line by line, file reading

bob gailer bgailer at alum.rpi.edu
Sun Dec 16 14:47:22 CET 2007


Luis N wrote:
> On Dec 16, 2007 10:17 PM, jon vs. python <jonvspython at gmail.com> wrote:
>   
>> Hi everyone,
>> I have a file with this content:
>>
>> "1
>> 1
>> 1
>> 1
>> 1
>> 1
>> 1
>> 2
>> 1
>> 1"
>>
>> I wanted a little script that would print the line containing "2" and every
>> line containing "1" after it. I've tried this:
>>
>>     
>>>>> def p():
>>>>>           
>>     f = file("prueba.txt",'r')
>>     for startline in f.read():
>>         if startline.find("2") != -1:
>>             print startline
>>             for endline in f.read():
>>                 if endline.find("1") != -1:
>>                     print endline
>>                     break
>>     f.close()
>>
>>
>>     
>>>>> p()
>>>>>           
>> 2
>>
>> I found a way for doing it.
>>
>> But still I don't really understand why I don't get two "1" lines printed.
>> It seems that every line is read in "for startline f.read()" so "for endline
>> in f.read()" will start reading but find no data, am I right?
>>
>> Thanks, Jon.
>>
>>     
>
>
> Try something like:
>
> show_ones = False
>
> for line in f.read():
>     if line.find(2) != -1 or show_ones == True:
>        print line
>        show_ones = True
>   
See my post re use of readline instead of read

Also note that when testing booleans you don't need == True. Just write

if line.find(2) != -1 or show_ones:



More information about the Tutor mailing list