-
Notifications
You must be signed in to change notification settings - Fork 11
/
gtf_span.py
executable file
·46 lines (36 loc) · 1.55 KB
/
gtf_span.py
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
#!/usr/bin/env python
from optparse import OptionParser
import gff
################################################################################
# gtf_span.py
#
# Merge all of the transcripts in one gene into a single spanning gtf entry.
################################################################################
################################################################################
# main
################################################################################
def main():
usage = 'usage: %prog [options] <gtf_file>'
parser = OptionParser(usage)
#parser.add_option()
(options,args) = parser.parse_args()
gtf_file = args[0]
genes = {}
for line in open(gtf_file):
a = line.split()
gene_id = a[9][1:-2]
genes.setdefault(gene_id,[]).append(line)
for gene_id in genes:
start = min([int(line.split()[3]) for line in genes[gene_id]])
end = max([int(line.split()[4]) for line in genes[gene_id]])
a = genes[gene_id][0].split('\t')
kv = gff.gtf_kv(a[8])
succinct_kv = {'gene_id':kv['gene_id']}
succinct_kv['transcript_id'] = ','.join(list(set([line.split()[11][1:-2] for line in genes[gene_id]])))
d = [a[0], 'gtf', 'gene', str(start), str(end), '.', a[6], '.', gff.kv_gtf(succinct_kv)]
print '\t'.join(d)
################################################################################
# __main__
################################################################################
if __name__ == '__main__':
main()