[Tutor] Iterating Lines in File and Export Results

John Doe dantheman5457 at gmail.com
Fri Oct 3 00:51:12 CEST 2014


Alan, Peter, et al:

Thank you all very much! Staring at this problem for hours was driving
me crazy and I am very appreciative for your guys' time in looking
into my silly error -- I have thoroughly reviewed both the responses
and it makes perfect sense (*sigh of relief*).



On Thu, Oct 2, 2014 at 6:08 PM, Peter Otten <__peter__ at web.de> wrote:
> John Doe wrote:
>
>> Hello List,
>> I am in need of your assistance. I have a text file with random words
>> in it. I want to write all the lines to a new file. Additionally, I am
>> using Python 2.7 on Ubuntu 12.04:
>>
>> Here is my code:
>>
>> def loop_extract():
>>     with open('words.txt', 'r') as f:
>>         for lines in f:
>
> The name `lines` is misleading, you are reading one line at a time.
>
>>             #print lines (I confirmed that each line is successfully
>>             #printed)
>>             with open('export.txt', 'w') as outf:
>>                 outf.write(lines)
>>                 #outf.write(lines)
>>                 #outf.write('{}\n'.format(lines))
>>                 #outf.write('{}\n'.format(line for line in lines))
>>
>>
>> For some reason, the second file only contains the last line from the
>> original file -- I have tried multiple variations (.read, .readlines,
>> .writelines, other examples preceded by comment from above and many
>> more) and tried to use the module, fileinput, but I still get the same
>> results.
>
> Every time the line
>
>>             with open('export.txt', 'w') as outf:
>
> is executed the file "export.txt" is truncated:
>
> https://docs.python.org/dev/library/functions.html#open
>
> To avoid the loss of data open the file once, outside the loop:
>
> with open("words.txt") as infile, open("export.txt", "w") as outfile:
>     for line in infile:
>         outfile.write(line)
>
>
>> I do understand there is another way to copy the file over, but to
>> provide additional background information on my purpose -- I want to
>> read a file and save successful regex matches to a file; exporting
>> specific data. There doesn't appear to be anything wrong with my
>> expression as it prints the expected results without failure. I then
>> decided to just write the export function by itself in its basic form,
>> per the code above, which the same behavior occurred;
>
> That is a good approach! Reduce the code until only the source of the
> problem is left.
>
>> only copying the
>> last line. I've googled for hours and, unfortunately, at loss.
>
> I do that too, but not "for hours" ;)
>
>> I want to read a file and save successful regex matches to a file;
>> exporting specific data.
>
> An experienced user of Python might approach this scenario with a generator:
>
> def process_lines(infile):
>     for line in infile:
>         line = process(line) # your line processing
>         if meets_condition(line): # your filter condition
>             yield line
>
> with open("words.txt") as infile:
>     with open("export.txt", "w") as outfile:
>         outfile.writelines(
>             process_lines(infile))
>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor


More information about the Tutor mailing list