help me to find the error

Dave Angel davea at ieee.org
Fri Jul 10 09:55:58 EDT 2009


jhinak sen wrote:
> hi,
> i am a beginner in python language,
>
> i am trying with this programme :
> to find the addition and mean from a data set in a file and writing the mean
> and sum in some other file :
> ""
> *#! /usr/bin/env python
>
> import re
> import cPickle as p
> import math
> from numpy import *
>
> f0= open("temp9","r+").readlines()
> f2= open("out1","r+")
> add_1=[ ];
> for i in range(0, len(f0)):
>         f1=f0[i].split()
>         add= float(f1[1])+float(f1[2])
>     mean= float(add)/2
>         print (f1[1]).ljust(6) ,(f1[2]).ljust(6),repr(add).ljust(7),
> repr(mean).ljust(7)
>         add_1.append(add)
>     add_1.append(mean)
>         f2.write("%s" % repr(add).ljust(7)),f2.write("%s" %
> repr(mean).ljust(7))
> print "printing from file"
> for i in range(0, len(add_1),2):
>         print add_1[i],"        ", add_1[i+1]
>
> f0.close()
> f2.close()*
>
>
> ""
>
> and this programme is givving me this error :
>
> ""    *Traceback (most recent call last):
>   File "./temporary1.py", line 24, in <module>
>     f0.close()
> AttributeError: 'list' object has no attribute 'close'*
> ""
>
> please help to to find the error.
> or suggest some simpler or better way
>
> note:
> 1)file "temp9" is already exist
> 2)this programme is giving me all my outputs, but at the end of the out
> ..its giving me that error.
>
>   
Others have pointed out the specific problem that gives you this error.  
But I'd like to point out a few other things to consider:

1) Don't mix tabs and spaces.  Best practice is to bind tab to (4) 
spaces in your editor, and never have a tab in a Python source file.
2) Think about your variable names.  As it stands, f0 is a list of 
lines, f1 is a list of "word" within a line, and f2 is a file.  No 
wonder you accidentally tried to close the list.  I'd suggest things like:
      infile = open(....)
      lines = infile.readlines()
      outfile = open(....)

      for line in lines:
             words = line.split(" ")     or  even   val1, val2 = 
lines.split(" ")

   Then of course the last two lines become
   infile.close()
   outfile.close()

3) Learn to use the for statement directly on a list, rather than using 
len() on the list to make an index, then using the index to find the value
4) On the open() calls, get your modes right.  Looks like you really want
   infile = open(infilename, "r")
   outfile = open(outfilename, "w")
5) Consider using tuples in your add_1 list, rather than separate 
elements.  That way, each element of the list would contain both sum and 
mean.
               add_1.append((add, mean))

       and the final print would become

    for item in add_1:
        print item[0],"        ", item[1]

6) Put anything over three lines into a function, instead of doing it at 
module scope.  That way, you'll be clearer about what things are local 
to this code, and what might be useful to other code in the same module.
In this case,  infilename, and outfilename might be arguments to that 
function.

There are lots of other refinements, but these are all within your 
reach, and would make the program much clearer.




More information about the Python-list mailing list