Christopher Spears wrote:
> I created a file called table.txt.  Here is the file's
> contents:
> 
> 1       5       10      2       1.0
> 2       10      20      4       2.0     3
> 3       15      30      8       3       2       1
> 4       20      40      16      4.0
> 
> I modified a script I found in "Programming Python"
> and created script called summer_v03.py that added the
> columns together succesfully and outputted the results
> in a list:
> 
> [EMAIL PROTECTED] ./text_proc 158> ./summer_v03.py
> table.txt
> [10.0, 50.0, 100.0, 30.0, 10.0, 5.0, 1.0]
> 
> Here is the code:

It is very wordy. There is no need to read and split the file twice. I 
would just make a list of the (split) lines in the file and keep it 
around. The loops in find_longest_line can easily be replaced with list 
comprehensions.

Some of your names are a little off. lines_in_file is actually a single 
line; cols_in_file is the cols of a single line.

Reading the file into a list of split columns and finding the length of 
the longest line is as  simple as
data = [ line.split() for line in open(fileName) ]
numCols = max(len(cols) for cols in data)

Then your summing loop pretty much stands, though you might want to use 
enumerate() instead of range(len(cols)):
sums = [0] * numCols
for cols in data:
   for i, col in enumerate(cols):
     sums[i] += col

Kent
> 
> #!/usr/bin/python
> import string
> 
> def find_longest_line(fileName):
>       longest_col = []
>       for lines_in_file in open(fileName, 'r').readlines():
>               cols_in_file = string.split(lines_in_file)
>               #print cols_in_file
>               numCols = len(cols_in_file)
>               if numCols > len(longest_col):
>                       longest_col = cols_in_file
>       return len(longest_col)
>               
> 
> def summer(fileName):
>       length_longest_col = find_longest_line(fileName)
>       sums = [0] * length_longest_col
>       for lines_in_file in open(fileName, 'r').readlines():
>               cols = string.split(lines_in_file)
>               for i in range(len(cols)):
>                       sums[i] = sums[i] + float(cols[i])
>       return sums
>                       
> if __name__ == '__main__':
>       import sys
>       print summer(sys.argv[1])
> 
> What do you think?
> 
> 
> "I'm the last person to pretend that I'm a radio.  I'd rather go out and be a 
> color television set."
> -David Bowie
> 
> "Who dares wins"
> -British military motto
> 
> "I generally know what I'm doing."
> -Buster Keaton
> _______________________________________________
> Tutor maillist  -  Tutor@python.org
> http://mail.python.org/mailman/listinfo/tutor
> 
> 


_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to