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()