Mercurial > repos > xuebing > sharplabtool
diff tools/fasta_tools/fasta_to_tabular.py @ 0:9071e359b9a3
Uploaded
author | xuebing |
---|---|
date | Fri, 09 Mar 2012 19:37:19 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/fasta_tools/fasta_to_tabular.py Fri Mar 09 19:37:19 2012 -0500 @@ -0,0 +1,57 @@ +#!/usr/bin/env python +# This code exists in 2 places: ~/datatypes/converters and ~/tools/fasta_tools +""" +Input: fasta (input file), tabular (output file), int (truncation of id), int (columns from description) +Output: tabular +format convert: fasta to tabular +""" + +import sys, os + +def stop_err( msg ): + sys.stderr.write( msg ) + sys.exit() + +def __main__(): + if len(sys.argv) != 5: + stop_err("Wrong number of argument. Expect four (fasta, tabular, truncation, columns)") + infile = sys.argv[1] + outfile = sys.argv[2] + keep_first = int( sys.argv[3] ) + descr_split = int( sys.argv[4] ) + fasta_title = fasta_seq = '' + if keep_first == 0: + keep_first = None + elif descr_split == 1: + #Added one for the ">" character + #(which is removed if using descr_split > 1) + keep_first += 1 + if descr_split < 1: + stop_err("Bad description split value (should be 1 or more)") + out = open( outfile, 'w' ) + for i, line in enumerate( open( infile ) ): + line = line.rstrip( '\r\n' ) + if not line or line.startswith( '#' ): + continue + if line.startswith( '>' ): + #Don't want any existing tabs to trigger extra columns: + line = line.replace('\t', ' ') + if i > 0: + out.write('\n') + if descr_split == 1: + out.write(line[1:keep_first]) + else: + words = line[1:].split(None, descr_split-1) + #apply any truncation to first word (the id) + words[0] = words[0][0:keep_first] + #pad with empty columns if required + words += [""]*(descr_split-len(words)) + out.write("\t".join(words)) + out.write('\t') + else: + out.write(line) + if i > 0: + out.write('\n') + out.close() + +if __name__ == "__main__" : __main__()