bob gailer wrote:
> f2 = open(outfile, 'w')
> for line in f1:
>       if s.startswith(".block"): # start of block
>               s2 = []
>       elif s==".endblock":
>               f2.write(",".join(s2) + "\n")
>       else: # data record
>               s2.append('"%s"' % line.strip())


This is nice & concise. I'm surprised though that no one has mentioned 
the csv module yet. Rather than inserting the quotes and commas 
yourself, let the module do it, e.g.

import csv
f2 = open(outfile, 'wb') # Note: open in binary mode for CSV
writer = csv.writer(f2)
for line in f1:
        s = line.strip()
        if s.startswith(".block"): # start of block
                s2 = []
        elif s==".endblock":
                writer.writerow(s2)
        else: # data record
                s2.append(s)

And FWIW I would probably have written it like this, which is a bit 
wordier, more explicit and less flexible than the above, which may be 
good or not depending on your data and expectations:

import csv
...
f2 = open(outfile, 'wb') # Note: open in binary mode for CSV
writer = csv.writer(f2)
itr = iter(f1)
try:
   while True:
     s = itr.next().strip()
     if not s:
       continue
     assert s=='.block'
     name = itr.next().strip()
     addr = itr.next().strip()
     city_st = itr.next().strip()
     zip = itr.next().strip()
     writer.writerow([name, addr, city_st, zip])
     itr.next()
     itr.next()
except StopIteration:
   pass

f2.close()

Kent
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to