Mercurial > repos > cpt > cpt_type_filter
view filter_type.py @ 4:a77124b86382 draft
planemo upload commit 3a6590b5d2b0ed51b423b2f7da8b07e917c5db9c
author | cpt |
---|---|
date | Wed, 30 Aug 2023 02:31:24 +0000 |
parents | 3df8d991938a |
children |
line wrap: on
line source
#!/usr/bin/env python import sys import argparse from CPT_GFFParser import gffParse, gffWrite from gff3 import feature_lambda, feature_test_type if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("gff3", type=argparse.FileType("r"), help="GFF3 annotations") parser.add_argument("types", type=str, nargs="+", help="Feature type to filter on") parser.add_argument("--invert", action="store_true") args = parser.parse_args() for rec in gffParse(args.gff3): tempFeats = feature_lambda( rec.features, feature_test_type, {"types": args.types}, invert=args.invert, subfeatures=False, ) rec.features = [] for x in tempFeats: rec.features.append(x) for x in rec.features: if "Parent" in x.qualifiers.keys(): found = 0 for seek in x.qualifiers["Parent"]: for y in rec.features: if y.id == seek: found += 1 break if found < len(x.qualifiers["Parent"]): del x.qualifiers["Parent"] gffWrite([rec], sys.stdout)