在网上查到的关于Python操作gff文件的库有三个,在此附上相关链接:
gffutilshttp://daler.github.io/gffutils/index.html
bcbio-gffhttps://biopython.org/wiki/GFF_Parsing
gff3-pyhttps://gff3-py.readthedocs.io/en/latest/readme.html
在写此片文章时,gffutils9个月前更新过,bcbio-gff两年前更新的,gff3-py两个月前更新的。简单比较过gffutils和gff3,个人感觉gffutils功能更强大,api看起来也比较人性化。故此篇文章基于gffutils,对gff文件进行简单操作演示。
1.Error: ModuleNotFoundError: No module named 'simplejson'. gffutils文档中说在python3.3下测试无误。但如果在python3.3+使用报这个错误的话,可以通过通过命令pip install simplejson安装
gffutils的核心是sqlite数据库,需要将解析的gff文件中的基因特征和关系存入数据库文件中,若再次使用时,就可直接使用生成的数据库文件。gff文件可以是纯文本形式,也可以是压缩格式。
2.数据下载url:https://www.vectorbase.org/download/anopheles-atroparvus-ebroscaffoldsaatre1fagz 3.gffutils.createdb(gfffilename, databasename) # 解析gff,生成数据库文件gffutils.FeatureDB(databasename) # 连接使用数据库文件使用try...except...语句来捕捉sqlite3.OperationalError错误。因为用gffutils.createdb()创造数据库文件时,若已存在databasename,则会抛出sqlite3.OperationalError。但如果你想生成数据库文件时覆盖已存在的文件可以通过gffutils.createdb(gfffilename, database_name,force=True)设置参数force=True来强制覆盖已存在的文件
成功生成或加载数据库文件后,可以查看gff文件中包含那些特征type,这些type各自有多少个,来对gff文件整体有个大致了解:
选取某一个特征type的所有特征:
还可以根据某几个条件来选取该条件内符合范围的特征
也可以通过注释的属性id来定位到该id所在特征。如知道某个exon的id为'AGAP004677-RB-E1B',在定位到后你就可以知道该特征的seqid,source,type,start,stop,等等:
此外特征与特征之间有parent和children的关系。可以通过children id寻找符合条件的parent,反之亦然。
参考:
https://pythonhosted.org/gffutils/index.html
Bioinformatics with Python Cookbook
领取专属 10元无门槛券
私享最新 技术干货