[portland] Not Seeing Script Error(s)
Ethan Furman
ethan at stoneleaf.us
Tue Nov 22 21:26:23 CET 2011
Rich Shepard wrote:
> On Tue, 22 Nov 2011, Rich Shepard wrote:
>
>> So, that clears up one issue. The malformed first three lines remain.
>> Could that be because I don't have the row[] properly indexed? Here
>> are the
>> first 4 lines of output:
>>
>> ['1', 'SW-1', '1990-10-10']||1
>> ['1', 'SW-1', '1990-10-10']||SW-1
>> ['1', 'SW-1', '1990-10-10']||1990-10-10
>> ['1', 'SW-1', '1990-10-10']|Ag|0.000
>
> The issue, I believe, is that I'm asking the writer to put the first
> three
> tokens in each row in a list (which does not explain why each of the first
> row's leading columns is in a separate row at the top). What I want to see
> (and apparently don't know how to achieve) is to have the first three rows
> above not produced, then all subsequent rows looking like a reformated
> row 4
> above:
>
> 1|SW-1|1990-10-10|Ag|0.000
Making a few modifications to the code I suggested back in January ;)
8<-----------------------------------------------------------------------
import csv
reader = csv.reader(open("test.txt","rb"),
delimiter="|",
quotechar="'")
output = csv.writer(open("out.txt","wb"),
delimiter="|",
quotechar="'")
# records are in columnar, not row, format
all_data = list()
col_headers = reader.next()
col_header_count = 0
for cell in col_headers:
if cell:
break
col_header_count += 1
col_headers = col_headers[col_header_count:]
for row in reader:
row = list(row)
# keep fieldname separate from values
all_data.append((row[:col_header_count], row[col_header_count:]))
for row_header, row_data in all_data:
for col_header, col_data in zip(col_headers, row_data):
output.writerow(row_header + [col_header, col_data])
8<-----------------------------------------------------------------------
~Ethan~
More information about the Portland
mailing list