[Tutor] identifying the calling module/function

Kent Johnson kent37 at tds.net
Sat Mar 8 22:04:03 CET 2008


tetsuo2k6 at web.de wrote:

> in dgf.py: (hope the formatting gets good for you, t-bird breaks the 
> lines badly on my machine...)
> 
> def csvwriter(*column_definitions):
>          """Edit Me!"""
>          if sys.argv[0] == /usr/local/bin/xyz.py:
> 		output_csv_filename = "xyz.csv"
> 	else:
> 		output_csv_filename = raw_input("Name of the file to produce? 
> (ATTENTION: WILL BE OVERWRITTEN!) ")

If you can change xyz.py you can avoid this by adding an optional 
filename parameter to the function.

>          first_row = ";".join(*column_definitions)
>          try:
>                  file = open(output_csv_filename, "w")
>                  file.write(first_row)
>                  file.close()
>          except:
>                  print("Couldn't open %s for writing." % 
output_csv_filename)

It's not such a good idea to hide the exception like this; you might at 
least want to print the actual exception. Or just let it propagate.

>                  sys.exit(1)

You can use the csv module to write the header row, too.

I would write this as

def csvwriter(*column_definitions, filename=None):
	if filename is none:
		filename = raw_input("Name of the file to produce?
(ATTENTION: WILL BE OVERWRITTEN!) ")

	try:
         	out = csv.writer(open(filename, "ab"),
delimiter=";", quoting=csv.QUOTE_NONE)
		out.writerow(column_definitions)
	except Exception, e
		print("Couldn't open %s for writing." %
output_csv_filename)
		print e
	return out

Kent


More information about the Tutor mailing list