批量提取antiSMASH核心基因编码AA序列(JSON文件)

import json
import os

def extract(json_path,out_path):
    """
    :param json_file: antismash结果json文件父目录
    :param out_path: core核心蛋白质序列存放目录
    """

    json_files=os.listdir(json_path)

    #创建结果存放目录
    isExists = os.path.exists(out_path)
    if not isExists:
        out_dir=os.mkdir(out_path)
    file_error = open("error_log.txt", "w+")
    for json_file in json_files:
        try:
            if json_file[-4:]=="json":
                file=open(json_path+json_file)
                lines = [line.strip('\n') for line in file.readlines()]
                file.close()

                string="".join(lines)
                root=json.loads(string)

                #所有contigs序列antismash信息
                records=root['records']

                #所有被注释的基因簇
                timings=list(dict.keys(root["timings"]))
                # print(timings)

                # 写入fasta文件

                file_w=open(out_path+json_file[:-5]+".faa","w+")

                # 遍历records
                for record in  records:
                    record_id=record["id"]

                    # 选取antismash注释records(contig)
                    if record_id in timings:
                        # 基因簇特征序列信息
                        features=record["features"]

                        for feature in features:
                            # 基因或cds信息
                            qualifiers=feature["qualifiers"]

                            # 获取核心编码基因信息
                            if "gene_kind" in qualifiers.keys() and \
                                    qualifiers["gene_kind"]==["biosynthetic"]:

                                # 位置
                                loc=feature["location"]
                                # print(loc)
                                # AA序列
                                AA_seq=qualifiers["translation"][0]
                                # print(AA_seq)

                                # AA序列contig 写入fasta文件
                                string_head=">"+record_id + "|"+loc
                                file_w.write(string_head+"\n")
                                file_w.write(AA_seq+"\n")
                file_w.close()
        except:
                file_error = open("error_log.txt", "w+")
                file_error.write(json_file)

def main():
    extract("../JSON_anismash/","out_path/")

if __name__ == '__main__':
    main()
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值