2015-11-07 55 views
0

我有一個我試圖解析的基因GTF文件,因此'gene_id','gene_type','gene_status','gene_name'和level都在單獨的列中。解析GTF基因文件

因此,對於我的原始文件:

chr1 | ENSEMBL gene| 17369| 17436| . - . |gene_id "ENSG00000278267.1"; gene_type "miRNA"; gene_status "KNOWN"; gene_name "MIR6859-1"; level 3; 
chr1 | ENSEMBL gene| 30366| 30503| . + . |gene_id "ENSG00000274890.1"; gene_type "miRNA"; gene_status "KNOWN"; gene_name "MIR1302-2"; level 3; 
chr1 | ENSEMBL gene| 157784| 157887| . - . |gene_id "ENSG00000222623.1"; gene_type "snRNA"; gene_status "KNOWN"; gene_name "RNU6-1100P"; level 3; 
chr1 | ENSEMBL gene| 187891| 187958| . - . |gene_id "ENSG00000273874.1"; gene_type "miRNA"; gene_status "KNOWN"; gene_name "MIR6859-2"; level 3; 

我想它看起來像這樣,以 'gene_id', 'gene_type', 'gene_status', 'gene_name,' 和水平都在單獨的列是:

chr1 |ENSEMBL |gene| 17369| |17436 |. - . |gene_id "ENSG00000278267.1" |gene_type "miRNA" |gene_status "KNOWN" |gene_name "MIR6859-1" |level 3 
chr1 |ENSEMBL |gene| 30366| 30503 |. + . |gene_id "ENSG00000274890.1" |gene_type "miRNA" |gene_status "KNOWN" |gene_name "MIR1302-2" |level 3 
chr1 |ENSEMBL |gene| 157784| 157887 |. - . |gene_id "ENSG00000222623.1" |gene_type "snRNA" |gene_status "KNOWN" |gene_name "RNU6-1100P" |level 3 
chr1 |ENSEMBL |gene| 187891| 187958 |. - . |gene_id "ENSG00000273874.1" |gene_type "miRNA" |gene_status "KNOWN" |gene_name "MIR6859-2" |level 3 

我曾嘗試使用gffutils它來解析,使用基本代碼,他們提供:

import gffutils 


db = gffutils.create_db("sRNA.gene.gtf", dbfn='sRNA.gene.gtf.db') 

print(list(db.featuretypes())) 

# Here's how to write genes out to file 
with open('sRNA.gene.gtf', 'w') as fout: 
    for gene in db.features_of_type('gene'): 
    fout.write(str(gene) + '\n') 

然而,我收到一個「導入錯誤:無法導入名稱‘功能:’

ImportError        Traceback (most recent call last) 
<ipython-input-26-4dd7cd5c7e24> in <module>() 
     2 
     3 
----> 4 db = gffutils.create_db("sRNA.gene.gtf", dbfn='sRNA.gene.gtf.db') 
     5 
     6 #db = gffutils.FeatureDB('sRNA.gene.gtf.db') 

我不知道是怎麼回事錯在這裏,現在正在考慮嘗試使用命令行只是解析它。任何人都可以請提供一些建議,以解析GTF文件的最佳方式?

預先感謝您。

+0

請編輯您的問題,包括你所需的輸出,給你的樣品輸入。祝你好運。 – shellter

+0

添加了更改,謝謝! – espop23

+0

很難看到您的輸入和輸出的差異。你可以切換到在列之間使用'|'字符嗎?你是否加載到Excel或類似?祝你好運。 – shellter

回答

0

您想要將GTF文件中的多個分隔符更改爲單個製表符分隔符。一旦你完成了這個文件不再是一個GTF文件。

下面的代碼將得到GTF文件的內容到一個文本文件

import gffutils 
try: 
    db = gffutils.create_db("sample.gtf", dbfn='sample.db') 
except: 
    pass 
db = gffutils.FeatureDB('sample.db', keep_order=True) 
with open('sample.txt', 'w') as fout: 
    for line in db.all_features(): 
     line = str(line) 
     line = line.split(";") #make your parsing changes here 
     fout.write(str(line) + '\n') 

請注意,您只能使用create_db()方法一次。這就是我評論它的原因。

編輯

新增try語句

+0

謝謝。我試過這個,但得到錯誤「DatabaseError:文件被加密或不是數據庫」 – espop23

+0

@ espop23您可能需要取消註釋我的代碼的第二行,並將'sample.gtf'重命名爲'sRNA.gene.gtf' –

+0

謝謝,然後它說「OperationalError:表格功能已經存在」雖然 – espop23