Beginner question: use function to read text file

James Stroud jstroud at ucla.edu
Mon Jun 26 21:23:03 EDT 2006


Luke wrote:
> I'm pretty stuck at the moment and wondering if anyone can spot the problem. 
> Trying to create a function that will read a text file into a list and 
> return that list.
> 
> I wrote the following function and saved it as 'fileloader.py'
> 
> def fileload(fname):
>     infile=open(fname)
>     dates =[]
>     times=[]
>     open=[]
>     high=[]
>     low=[]
>     close=[]
>     vol=[]
>     count=0
>     for line in infile:
>             item=line.split()
>             dates.append(item[0])
>             times.append(item[1])
>             open.append(item[2])
>             high.append(item[3])
>             low.append(item[4])
>             close.append(item[5])
>             vol.append(item[6])
>             #print 
> dates[count],times[count],open[count],high[count],low[count],vol[count]
>             count=count+1
> 
> 
>     return dates,times,open,high,low,close
> 
> 
> Then I executed the following script (merge contract v1.py):
> 
> import fileloader
> filename='c:/Python24/test/testdata2.txt'
> fileloader.fileload(filename)
> 
> 
> I then get the following error messages:
> 
> Traceback (most recent call last)
> File "C:\Python24\test\merge contract v1.py", in line3, in?
> fileloader.fileload(filename)
> File ("C:\Python24\text\fileloader.py", in line2, in fileload
> infile=open(fname)
> UnboundLocalError: local variable 'open' referenced before assignment
> Script terminated
> 
> Thanks for any help,
> Luke 
> 
> 

def fileload(fname):
     infile=open(fname)  # <===
     dates =[]
     times=[]
     open=[]             # <===

You have assigned open (which, by the way, is a builtin!) in a function 
*after* you have referenced it. You have over-ridden the open name with 
the assignment, but you have referenced it 'before assignment', as your 
error mesage says. This is a favorite trip-up of newer pythong 
programmers. Perhaps replace

     open=[]

with something like

     open_=[]

etc.

James



-- 
James Stroud
UCLA-DOE Institute for Genomics and Proteomics
Box 951570
Los Angeles, CA 90095

http://www.jamesstroud.com/



More information about the Python-list mailing list