[Tutor] better looping construct for replacing elements in file?
Brett Longworth
blongworth at whoi.edu
Thu Feb 2 22:29:25 CET 2012
Hi Joel,
Thanks for the reply. The little voice in my head was yelling, "Easier
with SQL!" the entire time, but I'm trying to learn Python.
-Brett
On 2/2/2012 4:16 PM, Joel Goldstick wrote:
> On Thu, Feb 2, 2012 at 3:50 PM, Brett Longworth<blongworth at whoi.edu> wrote:
>> Hello,
>>
>> Today I wrote a quick script to replace elements in multiple lines of a file
>> with corresponding elements from a single line in another file, linking the
>> two via an index element. The code iterates through the entire source file
>> to find the matching index for each line of the destination file. This
>> works, but it's clearly a terrible way to solve the problem. Can someone
>> point me to a more efficient, pythonic solution?
>>
>> thanks,
>> -Brett
>>
>> Code:
>>
>> wheel = "A794"
>> wheelfile = "A794.txt"
>> statusfile = "CURRENT.ams"
>>
>> sfile = csv.reader(open(statusfile), delimiter='\t')
>> statusWriter = csv.writer(open('statustest.txt', 'wb'), delimiter='\t',
>> quotechar='|', quoting=csv.QUOTE_MINIMAL)
>>
>> for sline in sfile:
>> #print sline
>> wfile = csv.reader(open(wheelfile))
>> for line in wfile:
>> #print line[0]
>> #print sline[18]
>> if line[0] == sline[18]:
>> sline[0] = line [1]
>> sline[1] = "OSG"+str(line[4])
>> sline[17] = wheel
>> sline[21] = line[9]
>> statusWriter.writerow(sline)
>>
>> Excerpt of wheelfile:
>>
>> "2","X496","02/01/12","OSG","106788","85411","GS-13365","Outside Primary
>> Standard |> Modern (1950)","2.43","149177"
>> "3","C655","02/01/12","OSG","106534","83028","HY-19231","Outside Blank |>
>> 30,000","3.63","149178"
>>
>> Excerpt of statusfile:
>>
>> Y002 BET2918 10/18/06 15:32:52 160.00 174 1.000 16408
>> 1.306E-12 1.213E-10 402.6 405.9 -42.7 3.2 1.2242
>> -0.0220 1.822 -12.66 A499 2 1 5631 86523 data
>> 3.7E-6
>> Y002 BET2918 10/18/06 15:35:46 150.00 162 1.000 15654
>> 1.313E-12 1.226E-10 407.6 410.3 -43.9 2.0 1.2180
>> -0.0243 1.894 -13.03 A499 2 1 5631 86523 3.7E-6
>> 0003 BET7147 10/18/06 15:55:33 170.00 186 1.000 3442
>> 2.903E-13 2.693E-11 357.7 359.3 -46.1 2.5 1.2000
>> 0.0276 1.734 -12.86 A499 3 1 5631 86524 3.3E-6
>> 0003 BET7147 10/18/06 15:58:49 170.00 185 1.000 3232
>> 2.772E-13 2.598E-11 351.8 353.4 -46.1 3.5 1.2000
>> 0.0149 1.761 -12.66 A499 3 1 5631 86524 3.2E-6
>> 0003 BET7147 10/18/06 16:02:06 170.00 185 1.000 3399
>> 2.955E-13 2.753E-11 346.9
>>
>>
>> --
>> Brett Longworth
>> Research Associate
>> Woods Hole Oceanographic Institution
>> ph: 508.289.3559
>> fax: 508.457.2183
>>
>> _______________________________________________
>> Tutor maillist - Tutor at python.org
>> To unsubscribe or change subscription options:
>> http://mail.python.org/mailman/listinfo/tutor
> If you are a little savvy with sql you could write each csv to tables,
> Since you have csv file input why not write each to a db table. Then
> you could join on line[0] == sline[18] and update your 4 fields.
>
> Then dump table as csv
>
--
Brett Longworth
Research Associate
Woods Hole Oceanographic Institution
ph: 508.289.3559
fax: 508.457.2183
More information about the Tutor
mailing list