2017-03-04 3 views
1

現在、いくつかのDNA配列を含むFASTAファイルがあります。一部の行末をタブ区切り文字に置き換える

"> \ w {4} \ d {6}" DNA配列ファイル - 300文字以上のランダムな大文字アルファベット文字の行。

私は各シーケンスタブを区切り、各記述子とシーケンスがタブで区切られた単一の行になるようにしようとしています。以下は私が試したことです:

from __future__ import print_function 
import re 
import sys 

Fasta_seq = open(sys.argv[1]) 
for a_line in Fasta_seq: 
    if re.search('^>.+', a_line): 
    re.sub('.+\n', '.+\t', a_line) 
    print(a_line, end='') 
    else: 
    re.sub('.+', '.+', a_line) 
    print(a_line, end='\n') 

しかし、このコードは私の記述子の最後に終わる行を削除していないようです。まったく同じ出力を私に返します。

誰も私が見落としていることのアイデアはありますか?

+0

をインターリーブ:'、 ''前にインデント 'a_line = a_line.strip()を追加if行。また、 'else'節の' print'の 'end = '\ n'''を削除してください。 – martineau

+0

あなたはWindowsにいますか? –

+0

はい、私はWindows 7を実行しています。 – martineau

答えて

1

休暇やインタラプトfastaを扱っているのかどうかはわかりませんが、この作業は正規表現なしで簡単に行うことができます(スペースも4つインデントします)。次のことを試してみてください。

Fasta_seq = open(sys.argv[1]) 
output_file = open("outfile.txt", "w") 

seq = "" 

for a_line in Fasta_seq: 

    if a_line.startswith(">"): 

     # Do this only when a sequence has been populated 
     if seq: 
      output_file.write("{}\t{}\n".format(header, seq)) 

     header = a_line.strip() 
     seq = "" 

    else: 
     seq += a_line.strip() 

これは両方で動作するはず残し、右 `Fasta_seqでa_lineための後FASTA入力

関連する問題