前言
因为最近使用REPET这个程序对基因组进行重复序列的注释,但是最后输出的结果是GFF3格式的文件,缺少统计信息。因此用python写了个脚本,对GFF3的信息进行提取并统计。
GFF3文件
想要从GFF3文件中提取的信息为重复序列的种类,数量,以及bp数。
GFF3文件分为9列,这次用到是第2、4、5、9列,分别代表来源,序列起始位置,结束位置,以及属性。
重复序列的种类可以从第9列属性中提取,bp数以(结束位置-起始位置+1)进行计算,数量则在过程中统计。
思路
按行读入GFF3文件,以”\t“符号分解。首先通过第2列,判断来源,有3种来源:
1. TEs
2. SSRs
3. blastx or tblasts
不同的来源,后缀不同,通过判断相应的字符串是否在第2列字符串中来判断是哪种来源。再通过第9列属性字符串,判断相应的分类代码字符串是否在其中,如果在其中,则将分类代码放入一个列表,然后以分类代码为键,bp数为值生成字典。
for循环不断读入,列表增长,字典合并,最后将列表唯一化,通过Counter类生成相应的字典,这个字典的值就是各分类的数量。
代码
生成字典是通过事先定义一个函数的方式实现的:
def return_TEs(lines):
TEs=['RYX', 'RXX-LARD', 'RIX', 'RLX', 'RPX', 'RSX', 'RXX-TRIM', 'DYX', 'DHX',
'DXX-MITE', 'DMX', 'DTX', 'RXX-chim', 'DXX-chim', 'noCat']
(seqid, source, seqtype, start, end, score, strand, phase, attributes) =\
lines.split('\t')
te_len = int(end) - int(start) + 1
for te in TEs:
if te in attributes:
return {te:te_len}
字典合并的函数:
#字典合并的函数&#