2015-05-20 43 views
0

比如我有以下 序列的FASTA文件:Python:如何基於二進制內容的文本文件提取DNA序列?

>human1 
AGGGCGSTGC 
>human2 
GCTTGCGCTAG 
>human3 
TTCGCTAG 

如何使用Python來閱讀以下的內容來提取 序列的文本文件? 1代表真,0代表假。將僅提取具有值1 的序列。

示例文本文件:

0 
1 
1 

預期輸出:

>human2 
GCTTGCGCTAG 
>human3 
TTCGCTAG 
+2

您的問題是一般性的。你寫了一些代碼嗎? – fecub

+0

試圖獲得一些清晰。所以你有一個DNA序列文件,每行有一個0或1的_separate_文件?然後你想解析文本文件以確定哪些序列是有效的?文本文件實際上是二進制格式,還是指您使用ascii(或其他編碼)文本明確寫入的0和1? – Gil

+0

該文本文件顯然是0和1。 – Allyson

回答

5

這是更好地使用biopython

from Bio import SeqIO 

mask = ["1"==_.strip() for _ in open("mask.txt")] 
seqs = [seq for seq in SeqIO.parse(open("input.fasta"), "fasta")] 
seqs_filter = [seq for flag, seq in zip(mask, seqs) if flag] 
for seq in seqs_filter: 
    print seq.format("fasta") 

你:

 
>human2 
GCTTGCGCTAG 
>human3 
TTCGCTAG 

解釋

解析FASTA:格式FASTA可能有幾個se的行quences(檢查fasta format),最好使用專門的庫來讀取(解析器)和寫輸出

面膜:我讀解模板文件,並轉換爲布爾[False, True, True]

過濾:使用ZIP功能爲每個序列匹配與他的面具,並且下面我使用列表理解來過濾

0

我不熟悉的fasta文件格式,專門但希望這有助於。你可以用下面的方法在python中打開你的文件,並在列表中提取有效的行條目。

valid = [] 
with open('test.txt') as f: 
    all_lines = f.readlines() # get all the lines 
    all_lines = [x.strip() for x in all_lines] # strip away newline chars 
    for i in range(len(all_lines)): 
     if all_lines[i] == '1': # if it matches our condition 
      valid.append(i) # add the index to our list 

    print valid # or get only the fasta file contents on these lines 

我用下面的文本文件test.txt運行它:

0 
1 
1 
1 
0 
0 
1 
1 

,並得到輸出打印valid時:

[1, 2, 3, 6, 7] 

我認爲這將有助於你待着,但如果您需要擴展答案,請在評論中告訴我。

1

您可以創建一個列表,像一個面具,因爲當你讀你的FASTA文件:

with open('mask.txt') as mf: 
    mask = [ s.strip() == '1' for s in mf.readlines() ] 

然後:

with open('seq.fasta') as f: 
    for i, line in enumerate(f): 
     if mask[i]: 
      *something* line 

或:

from itertools import izip 

for b, line in izip(open(mask_file), open(seq_file)): 
    if b.strip() == '1': 
      *something* line 
3

我覺得這可以幫助你,我真的認爲你應該花一些時間學習Python。 Python是生物信息學的良好語言。

display = [] 
with open('test.txt') as f: 
    for line in f.readlines(): 
     display.append(int(line.strip())) 

output_DNA = [] 
with open('XX.fasta') as f: 
    index = -1 
    for line in f.readlines(): 
     if line[0] == '>': 
      index = index + 1 

     if display[index]: 
      output_DNA.append(line) 

print output_DNA