前言
之前写过的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文件,由于本人不是很懂,也不确定是否绝对准确。
如果遇到问题请将截图贴到评论区或者私信!