Mercurial > repos > devteam > fasta_filter_by_length
annotate fasta_filter_by_length.py @ 4:8cacfcf96a52 draft default tip
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
author | devteam |
---|---|
date | Sun, 01 Mar 2020 07:24:42 -0500 |
parents | e626b3ff9922 |
children |
rev | line source |
---|---|
0 | 1 #!/usr/bin/env python |
2 """ | |
3 Input: fasta, minimal length, maximal length | |
4 Output: fasta | |
5 Return sequences whose lengths are within the range. | |
6 """ | |
7 | |
4
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
8 import sys |
0 | 9 |
4
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
10 assert sys.version_info[:2] >= (2, 4) |
0 | 11 |
4
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
12 |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
13 def stop_err(msg): |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
14 sys.exit(msg) |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
15 |
0 | 16 |
17 def __main__(): | |
18 input_filename = sys.argv[1] | |
19 try: | |
4
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
20 min_length = int(sys.argv[2]) |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
21 except Exception: |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
22 stop_err("Minimal length of the return sequence requires a numerical value.") |
0 | 23 try: |
4
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
24 max_length = int(sys.argv[3]) |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
25 except Exception: |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
26 stop_err("Maximum length of the return sequence requires a numerical value.") |
0 | 27 output_filename = sys.argv[4] |
4
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
28 tmp_size = 0 # -1 |
0 | 29 tmp_buf = '' |
30 at_least_one = 0 | |
4
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
31 with open(output_filename, 'w') as output_handle, open(input_filename, 'r') as input_handle: |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
32 for line in input_handle: |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
33 if not line or line.startswith('#'): |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
34 continue |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
35 if line[0] == '>': |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
36 if min_length <= tmp_size <= max_length or (min_length <= tmp_size and max_length == 0): |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
37 output_handle.write(tmp_buf) |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
38 at_least_one = 1 |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
39 tmp_buf = line |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
40 tmp_size = 0 |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
41 else: |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
42 if max_length == 0 or tmp_size <= max_length: |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
43 tmp_size += len(line.rstrip('\r\n')) |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
44 tmp_buf += line |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
45 # final flush of buffer |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
46 if min_length <= tmp_size <= max_length or (min_length <= tmp_size and max_length == 0): |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
47 output_handle.write(tmp_buf.rstrip('\r\n')) |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
48 at_least_one = 1 |
0 | 49 if at_least_one == 0: |
4
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
50 print("There is no sequence that falls within your range.") |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
51 |
0 | 52 |
4
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
53 if __name__ == "__main__": |
8cacfcf96a52
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/fasta_filter_by_length commit cd1ed08574b749eee2a3f6e6151dbb0c8ca15bbf"
devteam
parents:
3
diff
changeset
|
54 __main__() |