Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
import getopt, sys, csv def main(): try: opts, args = getopt.getopt(sys.argv[1:], "vc:i:o:", ["columns=", "input-file=", "output-file="] ) except getopt.GetoptError: print str(err) sys.exit(2) verbose = False columns = 1 inputfile = "" outputfile = "" for o, a in opts: if o == "-v": verbose = True elif o in ("-c", "--columns"): columns = int(a) elif o in ("-i", "--input-file"): inputfile = a elif o in ("-o", "--output-file"): outputfile = a else: assert False, "unhandled option" if inputfile == "": print "No input file specified" sys.exit(2) if outputfile == "": print "No output file specified" sys.exit(2) pivotReader = csv.reader(open(inputfile), delimiter=',', quotechar='"') f = open(outputfile, 'wt') pivotWriter = csv.writer(f) rownum = 0 for row in pivotReader: if rownum == 0: header = row else: colnum = 0 rowID = list() for col in row: if colnum <= columns-1: rowID.append(col) else: unpivotedRow = list() unpivotedRow.extend(rowID) unpivotedRow.append(header[colnum]) unpivotedRow.append(col) if verbose == True: print tuple(unpivotedRow) pivotWriter.writerow( tuple(unpivotedRow) ) colnum += 1 rownum += 1 f.close() if __name__ == "__main__": main()
This paste will be private.
From the Design Piracy series on my blog: