view text-from-gff3.py @ 13:c4bde687c846 draft default tip

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/circos commit 0cfd88d16b0b20a66d4b21b037ddee6a8c440d88
author iuc
date Wed, 12 Apr 2023 15:09:05 +0000
parents 014a21767ac4
children
line wrap: on
line source

#!/usr/bin/env python
import logging
import sys

from BCBio import GFF

logging.basicConfig(level=logging.INFO)
log = logging.getLogger()


if __name__ == "__main__":
    attr = sys.argv[2]

    for record in GFF.parse(sys.argv[1]):
        if len(record.features) == 0:
            continue

        for feature in sorted(record.features, key=lambda x: x.location.start):
            # chrom chromStart chromEnd
            # name score strand
            # thickStart thickEnd itemRgb

            kv = {
                "strand": 0 if not feature.location.strand else feature.location.strand,
                "value": feature.qualifiers.get("score", [0])[0],
            }

            if attr not in feature.qualifiers:
                continue

            name = feature.qualifiers[attr][0]

            line = [
                record.id,
                str(int(feature.location.start)),
                str(int(feature.location.end)),
                name,
                ",".join(["%s=%s" % x for x in sorted(kv.items())]),
            ]

            sys.stdout.write("\t".join(line))
            sys.stdout.write("\n")