[Tutor] referencing vars()

Kent Johnson kent37 at tds.net
Sat Sep 15 22:30:05 CEST 2007


John wrote:
>         #Set up writer
>         import csv
>         vardict=vars()
>         for var in vardict:
>                 if var=='allcum' or var=='alldhdt':
>                         outfile=in_path+'/'+dataset+'_'+str(var)+'.csv'
>                         writer = csv.writer(open(outfile, "wb"))
>                         writer.writerows(var)
>  
> I'm trying to do the above, but of course get an error because vardict 
> is only referencing vars(), thus changes size... also, I tried 
> vardict=[vars()], but this fails as well??

I'm not too clear what you are trying to do here. Do you want the values 
of the variables allcum and alldhdt?

vars() gives you a dict whose keys are varible names and values are, 
well, the values. I think you are trying to write the contents of allcum 
to a file with allcum in the name?

You could do it with vars like this:

         for var in ['allcum', 'alldhdt']:
                 outfile=in_path+'/'+dataset+'_'+var+'.csv'
                 writer = csv.writer(open(outfile, "wb"))
                 writer.writerows(vars()[var])

or you could iterate a list of name, value tuples directly:

         for name, value in [('allcum', allcum), ('alldhdt', alldhdt)]:
                 outfile=in_path+'/'+dataset+'_'+name+'.csv'
                 writer = csv.writer(open(outfile, "wb"))
                 writer.writerows(value)

I think I prefer the second, even with the duplication of names; it 
feels more explicit to me.

Another alternative would be to accumulate the values in a dict with 
keys 'allcum' and 'alldhdt'. Then you would look up in that dict instead 
of in vars().

HTH,
Kent


More information about the Tutor mailing list