Hi Dave,

> From: dave s <[EMAIL PROTECTED]>
> Subject: [Tutor] A list in list problem
> To: python tutor <[email protected]>
> Message-ID: <[EMAIL PROTECTED]>
> Content-Type: text/plain;  charset="us-ascii"

> def CSV_Lines(self, csv, from_, to):
> """Returns a list of cleaned up lines from csv 'from_' line

> number  'to' line number"""

>         clean_line = clean_csv = []
>         for string in range(from_, to):

>                 split_string = csv[string].split(',')
>                 split_string = split_string[1:-1]  # Strip the LHS column + the /n'

>                 if split_string[0] == '' : continue  # Skip empty lines
>                 print '##########################'
>                 print 'split_string ', split_string
>                 for string in split_string:

>                         if len(string) > 0: clean_line.append(string[1:-1])
>                 print 'clean_line ',clean_line
>                 clean_csv.append(clean_line)
>                 print 'clean_csv ',clean_csv
>                 clean_line = []

>
> But I get clean_csv trouble  ...

> [EMAIL PROTECTED]:~/python_develop/unison/PxQxAudit/main$ ./crosscheck.py
> ##########################
> split_string  ['"temp1"', '"wow a variable"', '', '', '']
> clean_line  ['temp1', 'wow a variable']
> clean_csv  ['temp1', 'wow a variable', [...]]
> ##########################
> split_string  ['"temp2"', '', '', '', '']
> clean_line  ['temp2']
> clean_csv  ['temp1', 'wow a variable', [...], ['temp2']]
> [EMAIL PROTECTED]:~/python_develop/unison/PxQxAudit/main$

> ie clean_csv ends up as ['temp1', 'wow a variable', [...], ['temp2']] instead
> of [[temp1, wow a variable], [temp2]]


You have used string as variable name two times, once as an integer and once as a field in the line.
It should be avoided.

I like list comprehension in this case.

def CSV_Lines2(csv, from_, to):
    csv = csv[from_ : to]                                         # We are interested just here
    csv = [line.split(',') for line in csv]         # Make a 2D array from the list
    return [LineItems[1:-1] for LineItems in csv if len(LineItems) > 2]
                    # filter out first and last columns, and lines with too less items



csv = """Header1
Header2
temp1,12,20,1
temp2,22,22,2
temp3,33,44,3
temp4,34,64,4
Footer1
Footer2"""

csv = csv.split('\n')
print CSV_Lines2(csv, 2, 6)
>>>[['12', '20'], ['22', '22'], ['33', '44'], ['34', '64']]


Yours sincerely,
______________________________
Janos Juhasz

_______________________________________________
Tutor maillist  -  [email protected]
http://mail.python.org/mailman/listinfo/tutor

Reply via email to