Genbank的gbff格式转gff3格式(补充)

前言

之前写过的Genbank的gbff格式转gff3格式的运行环境对于很多非计算机行业的同学不是很友好,在帮助一位网友处理格式转换之后,整理了下面这个python转换的方式(注:本人的生物信息等知识还停留在高中水平,只是曾经帮助过同学处理过一个gbff格式转gff3的问题,所以纰漏之处,希望各位大神指出)

python代码
# 导入依赖,如提示没有名为"xxx"的模块,pip安装即可,推荐使用python3.6以上
from BCBio import GFF  
# 如果提示"ModuleNotFoundError: No module named 'BCBio'",安装一下bcbio-gff: pip3 install bcbio-gff==0.6.6
from Bio import SeqIO
# 如果提示"ModuleNotFoundError: No module named 'Bio'", 安装一下bio: pip3 install bio==0.4.1
import gzip


def gbff2gff(input_filename, output_filename):
    """
    gbff格式转gff
    :param input_filename: 输入文件名, 如 GCA_085.1_ASM148v1_genomic.gbff
    :param output_filename: 输出文件名, 如 GCA_085.1_ASM148v1_genomic.gff
    :return:
    """
    # 输入文件名,如果不在当前目录下,请使用绝对路径
    input_filename = input_filename
    # 输出文件名
    output_filename = output_filename
    try:
        input_handle = open(input_filename, "r")
        output_handle = open(output_filename, "w")
    except FileNotFoundError as e:
        print(f"错误:{str(e)}")
        print(f"文件[{input_filename}]不存在")
        return

    try:
        # 转换
        GFF.write(SeqIO.parse(input_handle, "genbank"), output_handle)

    except Exception as e:
        print("转换出错:", str(e))
        # 关闭文件
        input_handle.close()
        output_handle.close()


def uncompress_gz(src_filename):
    print("开始解压...")
    try:
        dest_name = src_filename.replace(".gz", "")
        gz_file = gzip.GzipFile(src_filename)
        with open(dest_name, "wb+") as f:
            f.write(gz_file.read())
        gz_file.close()
        print("解压完成!")
        return dest_name
    except Exception as e:
        print(f"解压出错:{str(e)}")


if __name__ == '__main__':
    print("****重要***\n请将gbff文件放在和当前程序同一个文件夹下!!!")
    _input_filename = input("请输入要转换的文件名(按Enter完成输入):")
    _output_filename = input("请输入转换后的文件名,默认和输入文件名一致")

    if not _output_filename:
        print("没有指定输出名称,默认将输入文件名的gbff改为gff")
        _output_filename = _input_filename.replace("gbff", "gff")
    confirm = input(f"请确认输入的文件名是否正确:\n输入:{_input_filename};\n输出:{_output_filename}\n确认请按Enter,重新输入请按Ctrl+C重新运行程序\n")

    if not _input_filename.endswith(".gbff"):
        if _input_filename.endswith(".gz"):
            uncompress_flag = input("输入的貌似是个gbff压缩后的gz文件,是否解压?输入 yes 进行解压:")
            if uncompress_flag == "yes":
                uncompress_gz(_input_filename)
                _input_filename = _input_filename.split('.gz')[0]
            else:
                exit()
        else:
            print(f"输入的文件名不正确:{_input_filename}")
    else:
        print(f"输入的文件名不正确:{_input_filename}")

    print("开始转换...")
    gbff2gff(_input_filename, _output_filename)
    print("转换完成!")

使用方法

复制上面的代码,新建一个文件,粘贴进去,然后把这个文件保存为gbff2gff3.py,确定后缀名为.py,电脑上安装python3.6的解释器,这个安装可以百度到,安装好之后,Win+R打开运行,输入cmd进入到黑窗口,在里面输入python gbff2gff3.py按回车,根据页面上的提示进行。

说明

执行完之后,会将一个几百兆的gbff文件转成一个几兆的gff3文件,由于本人不是很懂,也不确定是否绝对准确。

如果遇到问题请将截图贴到评论区或者私信!

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值