Ok, so trying to convert it to a function: def source(ifile, *args): """ takes a file object and a list of variables as input. assumes, source file has variables in format: VAR[i]=variable """
import re # Read the file lines = fd.readlines() fd.close() # Make it python friendly: put all values in 'single quotes' cmd = '\n'.join([re.sub( r'^([^=]+)=(.*)$', r"\1='\2'", v) for v in lines]) # Create variables as list of appropriate size with default IM STUCK HERE... HOW DO I DYNAMICALLY CONVERT THE LIST OF VARIABLE NAMES TO VARIABLES OF TYPE LIST # Execute the command and all your variables are populated ... exec(cmd) Thanks, > Thanks! This is helpful.. I like the RE approach as it's conceivable to > write a function... > > On 10/27/07, Aditya Lal <[EMAIL PROTECTED]> wrote: > > > > You can source the file in python provided that you make it python > > friendly:- > > > > STN_id[1]='AAA' instead of STN_id[1]=AAA > > ... > > > > > > ----------- > > import re > > # Read the file > > fd = open('sitelocations') > > lines = fd.readlines() > > fd.close() > > > > > > # Make it python friendly: put all values in 'single quotes' > > cmd = '\n'.join([re.sub( r'^([^=]+)=(.*)$', r"\1='\2'", v) for v in > > lines]) > > > > > > # Create variables as list of appropriate size with default values > > (assuming 0) > > max = 5 > > STN_id, STNlat, STNlon, STNelv = [0]*max, [0]*max, [0]*max, [0]*max > > > > > > # Execute the command and all your variables are populated ... > > exec(cmd) > > > > > > ------------------- > > Not sure if this is a better way :) But atleast it will make the file > > sitelocations order invariant - implies you can interchange the lines > > without breaking the logic. > > > > > > Caveat - list in python starts at 0 index so STN_id[1] is not the first > > element but the second element. But you can filter unwanted items from the > > list if you want as in - > > [ x for x in STN_id if x != 0 ] > > > > > > HTH > > Aditya > > > > On 10/27/07, John < [EMAIL PROTECTED]> wrote: > > > > > I have a file sitelocations: > > > > > > STN_id[1]=AAA > > > STNlat[1]=58.800000 > > > STNlon[1]=17.400000 > > > STNelv[1]=20 > > > STN_id[2]=BBB > > > STNlat[2]=42.450000 > > > STNlon[2]=25.583333 > > > STNelv[2]=2925 > > > > > > which in shell scripts I can simple 'source'. In Python I have to: > > > sitesFile=file('sitelocations','r') > > > sites=sitesFile.readlines() > > > i=0; > > > for l in sites: > > > if i==0: > > > STN_id.append(l.split('=')[1].strip('\n')); i+=1; > > > elif i==1: > > > STNlat.append(l.split('=')[1].strip('\n')); i+=1; > > > elif i==2: > > > STNlon.append(l.split('=')[1].strip('\n')); i+=1; > > > else: > > > STNelv.append(l.split('=')[1].strip('\n')); i=0; > > > > > > Is there a better way?? > > > > > > Thanks! > > > > > > > > > > > > > > > -- > > > Configuration > > > `````````````````````````` > > > Plone 2.5.3-final, > > > CMF-1.6.4, > > > Zope (Zope 2.9.7-final, python 2.4.4, linux2), > > > Five 1.4.1, > > > Python 2.4.4 (#1, Jul 3 2007, 22:58:17) [GCC 4.1.1 20070105 (Red Hat > > > 4.1.1-51)], > > > PIL 1.1.6 > > > > > > _______________________________________________ > > > Tutor maillist - Tutor@python.org > > > http://mail.python.org/mailman<http://mail.python.org/mailman/listinfo/tutor>/listinfo/tutor<http://mail.python.org/mailman/listinfo/tutor> > > > > > > > > > > > > -- > > Aditya > > > > > > -- > Configuration > `````````````````````````` > Plone 2.5.3-final, > CMF-1.6.4 , > Zope (Zope 2.9.7-final, python 2.4.4, linux2), > Five 1.4.1, > Python 2.4.4 (#1, Jul 3 2007, 22:58:17) [GCC 4.1.1 20070105 (Red Hat > 4.1.1-51)], > PIL 1.1.6 > -- Configuration `````````````````````````` Plone 2.5.3-final, CMF-1.6.4, Zope (Zope 2.9.7-final, python 2.4.4, linux2), Five 1.4.1, Python 2.4.4 (#1, Jul 3 2007, 22:58:17) [GCC 4.1.1 20070105 (Red Hat 4.1.1-51)], PIL 1.1.6
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor