comparison filter_type.py @ 3:3df8d991938a draft

planemo upload commit 94b0cd1fff0826c6db3e7dc0c91c0c5a8be8bb0c
author cpt
date Mon, 05 Jun 2023 02:53:47 +0000
parents
children
comparison
equal deleted inserted replaced
2:4f44b49e3f5e 3:3df8d991938a
1 #!/usr/bin/env python
2 import sys
3 import argparse
4 from CPT_GFFParser import gffParse, gffWrite
5 from gff3 import feature_lambda, feature_test_type
6
7 if __name__ == "__main__":
8 parser = argparse.ArgumentParser()
9 parser.add_argument("gff3", type=argparse.FileType("r"), help="GFF3 annotations")
10 parser.add_argument("types", type=str, nargs="+", help="Feature type to filter on")
11 parser.add_argument("--invert", action="store_true")
12 args = parser.parse_args()
13
14 for rec in gffParse(args.gff3):
15 tempFeats = feature_lambda(
16 rec.features,
17 feature_test_type,
18 {"types": args.types},
19 invert=args.invert,
20 subfeatures=False,
21 )
22 rec.features = []
23 for x in tempFeats:
24 rec.features.append(x)
25 for x in rec.features:
26 if "Parent" in x.qualifiers.keys():
27 found = 0
28 for seek in x.qualifiers["Parent"]:
29 for y in rec.features:
30 if y.id == seek:
31 found += 1
32 break
33 if found < len(x.qualifiers["Parent"]):
34 del x.qualifiers["Parent"]
35 gffWrite([rec], sys.stdout)