After creating my list from the previous post I needed to save this to a text file to send back to the person who had requested the information. I just wrote a standard loop over the list but this got me thinking about a better way to do this as it’s a common task. As it turns out not really but it did bring up a few titbits worth mentioning.
If you are from a PERL background you might be tempted to use a single write and a join to turn the list into a string as follows
Don’t. This creates a new string in memory from the list and then writes that. Ok if it is a small list but a huge waste of memory for larger ones.
For the more experienced Python user, using a generator produces arguably a cleaner syntax and saves a line of typing. As with all generators, you can make it conditonal by adding an if clause to the end.
with open(r'x:\path\to\file.txt','w') as txtfile: txtfile.writelines( "%s\n" % item for item in mylist )
That covers off the text file, but there may be a better option depending upon what is going to be done with the resulting file. I’ll finish the following couple of examples.
# if the file is going to Excel, maybe a CSV file import csv with open(r'x:\path\to\file.csv','w') as csvfile: csv = csv.writer(csvfile) for item in mylist: csv.writerow([item]) # or how about json if it is going to another program import json # Python 2.5 use simplejson with open(r'x:\path\to\file.json','w') as jsonfile: json.dump(mylist,jsonfile)