I’ve done some refinement on my original writeCSVFormat() function by using list comprehensions, which are supposedly a lot faster, and adding minor exception handling.
I’ve also added a helper function csvFormat() that formats an item depending on its type. This can be customized to format items anyway you might imagine. One interesting aspect of this function is the recursion for an item of ListType. I obviously didn’t cover all the types. I’ll leave adding code for any additional types up to the individual.
In order to use these, place them in a module named ‘misc’ under the ‘app’ module.
def csvFormat(item):
import types, app
if isinstance(item, types.NoneType):
return '"N/A"'
elif isinstance(item, types.IntType):
return '%d' % item
elif isinstance(item, types.LongType):
return '%d' % item
elif isinstance(item, types.FloatType):
return '%f' % item
elif isinstance(item, types.ComplexType):
return '"%s"' % item
elif isinstance(item, types.StringType):
return '"%s"' % item
elif isinstance(item, types.UnicodeType):
return '"%s"' % item
elif isinstance(item, types.ListType):
return ','.join([app.misc.csvFormat(x) for x in item])
else:
try:
return '"%s"' % item
except:
return '"#Error#"'
def writeCSVFile(dataSet, filename=""):
import fpmi, app
if len(filename) == 0:
filename = fpmi.file.saveFile("*.csv")
if filename != None:
rows = []
rows.append(",".join([app.misc.csvFormat(col) for col in dataSet.getColumnNames()]))
pyDataSet = fpmi.db.toPyDataSet(dataSet)
for row in pyDataSet:
rows.append(",".join([app.misc.csvFormat(col) for col in row]))
try:
fpmi.file.writeFile(filename, "\r\n".join(rows))
except:
fpmi.gui.errorBox("An error was encountered while writing the CSV file '%s'." % filename, "Error")
Here’s an expanded example:
ds = fpmi.db.toDataSet(["col1", "col2", "col3", "col4", "col5", "col6", "col7"], [[1,2,3,"A",10.0,1+1j,['a','b']],[4,5,6,"B",21.21,2+2j,['c','d']], [7,8,9,"C",17.8,3+3j,['e','f']]])
app.misc.writeCSVFile(ds, "")