Stripping whitespace
John Machin
sjmachin at lexicon.net
Wed Jan 23 17:04:26 EST 2008
On Jan 24, 7:23 am, ryan k <r... at ryankaskel.com> wrote:
> On Jan 23, 3:02 pm, John Machin <sjmac... at lexicon.net> wrote:
>
> > On Jan 24, 6:57 am, ryan k <r... at ryankaskel.com> wrote:
>
> > > So yea i will just have to count dashes.
>
> > Read my lips: *you* counting dashes is dumb. Writing your code so that
> > *code* is counting dashes each time it opens the file is smart.
>
> Okay it's almost working ...
>
> new parser function:
>
> def _load_table(self):
> counter = 0
> for line in self.table_fd:
> # Skip the second line
The above comment is a nonsense.
> if counter == 0:
> # This line contains the columns, parse it
> column_list = line.split()
In generality, you would have to allow for the headings to contain
spaces as well -- this means *saving* a reference to the heading line
and splitting it *after* you've processed the line with the dashes.
> elif counter == 1:
> # These are the dashes
> line_l = line.split()
> column_width = [len(i) for i in line_l]
Whoops.
column_width = [len(i) + 1 for i in line_l]
> print column_width
> else:
> # This is a row, parse it
> marker = 0
> row_vals = []
> for col in column_width:
> start = sum(column_width[:marker])
> finish = sum(column_width[:marker+1])
> print line[start:finish].strip()
If you had printed just line[start:finish], it would have been obvious
what the problem was. See below for an even better suggestion.
> row_vals.append(line[start:finish].strip())
> marker += 1
Using sum is a tad ugly. Here's an alternative:
row_vals = []
start = 0
for width in column_width:
finish = start + width
#DEBUG# print repr(line[start:finish].replace(' ', '~'))
row_vals.append(line[start:finish].strip())
start = finish
> self.rows.append(Row(column_list, row_vals))
> counter += 1
>
> Something obvious you can see wrong with my start finish code?
See above.
More information about the Python-list
mailing list