Report abuse

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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()