Mercurial > repos > george-weingart > maaslin
comparison src/transpose.py @ 0:e0b5980139d9
maaslin
author | george-weingart |
---|---|
date | Tue, 13 May 2014 22:00:40 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:e0b5980139d9 |
---|---|
1 #!/usr/bin/env python | |
2 ####################################################################################### | |
3 # This file is provided under the Creative Commons Attribution 3.0 license. | |
4 # | |
5 # You are free to share, copy, distribute, transmit, or adapt this work | |
6 # PROVIDED THAT you attribute the work to the authors listed below. | |
7 # For more information, please see the following web page: | |
8 # http://creativecommons.org/licenses/by/3.0/ | |
9 # | |
10 # This file is a component of the SflE Scientific workFLow Environment for reproducible | |
11 # research, authored by the Huttenhower lab at the Harvard School of Public Health | |
12 # (contact Curtis Huttenhower, chuttenh@hsph.harvard.edu). | |
13 # | |
14 # If you use this environment, the included scripts, or any related code in your work, | |
15 # please let us know, sign up for the SflE user's group (sfle-users@googlegroups.com), | |
16 # pass along any issues or feedback, and we'll let you know as soon as a formal citation | |
17 # is available. | |
18 ####################################################################################### | |
19 | |
20 """ | |
21 Examples | |
22 ~~~~~~~~ | |
23 | |
24 ``data.pcl``:: | |
25 | |
26 a b | |
27 c d | |
28 e f | |
29 | |
30 ``Examples``:: | |
31 | |
32 $ transpose.py < data.pcl | |
33 a c e | |
34 b d f | |
35 | |
36 $ echo "a b c" | transpose.py | |
37 a | |
38 b | |
39 c | |
40 | |
41 .. testsetup:: | |
42 | |
43 from transpose import * | |
44 """ | |
45 | |
46 import argparse | |
47 import csv | |
48 import sys | |
49 | |
50 def transpose( aastrIn, ostm ): | |
51 """ | |
52 Outputs the matrix transpose of the input tab-delimited rows. | |
53 | |
54 :param aastrIn: Split lines from which data are read. | |
55 :type aastrIn: collection of string collections | |
56 :param ostm: Output stream to which transposed rows are written. | |
57 :type ostm: output stream | |
58 | |
59 >>> aastrIn = [list(s) for s in ("ab", "cd", "ef")] | |
60 >>> transpose( aastrIn, sys.stdout ) #doctest: +NORMALIZE_WHITESPACE | |
61 a c e | |
62 b d f | |
63 | |
64 >>> transpose( [list("abc")], sys.stdout ) #doctest: +NORMALIZE_WHITESPACE | |
65 a | |
66 b | |
67 c | |
68 """ | |
69 | |
70 aastrLines = [a for a in aastrIn] | |
71 csvw = csv.writer( ostm, csv.excel_tab ) | |
72 for iRow in range( len( aastrLines[0] ) ): | |
73 csvw.writerow( [aastrLines[iCol][iRow] for iCol in range( len( aastrLines ) )] ) | |
74 | |
75 argp = argparse.ArgumentParser( prog = "transpose.py", | |
76 description = """Transposes a tab-delimited text matrix. | |
77 | |
78 The transposition process is robust to missing elements and rows of differing lengths.""" ) | |
79 __doc__ = "::\n\n\t" + argp.format_help( ).replace( "\n", "\n\t" ) + __doc__ | |
80 | |
81 def _main( ): | |
82 args = argp.parse_args( ) | |
83 transpose( csv.reader( sys.stdin, csv.excel_tab ), sys.stdout ) | |
84 | |
85 if __name__ == "__main__": | |
86 _main( ) |