2017-10-17 10 views
0

別のファイル(たとえば、 'file2.fasta')の対応するヘッダーに変更する必要がある1つのファイル(たとえば 'file1.fasta')にヘッダーを挿入します。注:1)file1.fastaには、file2.fastaから逆順に補完されたシーケンスがいくつかありますが、シーケンスを変更しないままにします。 2)file1.fastaシーケンスはさまざまなソースから来ています。つまり、ヘッダーにはさまざまなフォーマットが表示されます。私は変更のためのちょうど2つのフォーマットを目標にしています。ここあるファイルのテキストを別のファイルのテキストに置き換える

はfile2.fastaヘッダの例である:file1.fastaですべての様々なヘッダフォーマット

>OFAS009268-RA-EXON07 |design:coreoidea-v1,designer:forthman,probes-locus:OFAS009268-RA-EXON07,probes-probe:,probes-source:Clavigralla_tomentosicollis_gi_512427643_gb_GAJX01006991.1 
CATTGCAGCAACTAACAGAGTTGATATATTAGATCCAGCCCTTCTCCGATCAGGCAGGCTAGACAGAAAAATTGAATTTCCTCATCCAAATGAAGATGCCCGTGCTCGAATTATGCAAAT 
>OFAS016134-RA-EXON02 |design:coreoidea-v1,designer:forthman,probes-locus:OFAS016134-RA-EXON02,probes-probe:,probes-source:Anasa_tristis_comp3229_c0_seq1 
AGGGCTTGTGATTCCCTTGAGCACATCGCAAGCCTCTGTTCTAGACAAAACATTCCACATTTGGTCAATAATGCTTTTGGTTTGCAAAGTGCACGTCTCATGCATTTAATTCAAGAGGCT 

例(変形例を対象ものは最初の2つのヘッダである):

>Clavigralla_tomentosicollis_gi_512427643_gb_GAJX01006991.1_103_rc 
CATTGCAGCAACTAACAGAGTTGATATATTAGATCCAGCCCTTCTCCGATCAGGCAGGCTAGACAGAAAAATTGAATTTCCTCATCCAAATGAAGATGCCCGTGCTCGAATTATGCAAAT 
>Anasa_tristis_comp3229_c0_seq1_0_rc 
AGGGCTTGTGATTCCCTTGAGCACATCGCAAGCCTCTGTTCTAGACAAAACATTCCACATTTGGTCAATAATGCTTTTGGTTTGCAAAGTGCACGTCTCATGCATTTAATTCAAGAGGCT 
>ENSOFAS009761_p2 |design:coreoidea-v1,designer:forthman,probes-locus:ENSOFAS009761,probes-probe:2,probes-source:Anoplocnemis_curvipes_contig5129 
TTAAGAATCTCGAGAAAACCCCTCAGGATGATGAATTACTTGAAATATATGCTCTCTATAAACAAGCAACTGTAGGAGACTGTGACACAAGTAAGCCTGGGATGTTTGATTTCAAAGGGA1 
>uce-3225_p7 |design:hemiptera-v1,designer:faircloth,probes-locus:uce-3225,probes-probe:7,probes-source:halhal1,probes-global-chromo:Scaffold629,probes-global-start:410155,probes-global-end:410275,probes-local-start:0,probes-local-end:120 
AAATCCATCAAGAAATACCAACAACAACTTAAGGATGTCCAGACCGCACTCGAGGAAGAACAAAGAGCTAGGGATGATGCCCGAGAACAACTTGGTATTGCCGAAAGGCGAGCCAACGCT 
>Anasa_tristis_comp8051_c0_seq1_A_0 
ATCCTCCTGATTGGGCAGAAATTTTGAACCATTTTCGAGGGTCTGAACTTCAGAATTATTTTACAAAAATTTTGGAGGATGACCTTAAAGCCCTTATCAAGCCTCAGTATGTCGACCAAA 
>Anasa_tristis_comp8051_c0_seq1_B_0 
TAACGTCCTAGGTTAGGTTTCTGTTTACCAGCTAAAATCTTGAGGGCTGTAGACTTTCCAATGCCATTAGTTCCAACCAGACCTAAAACTTCTCCTGGTCTTGGAATTGGAAGTCTGTGG 

最後の2つは、ターゲットと似ていますが、余分なアンダースコアと1文字があります。これらは変更されないままにする必要があります。 >uce>ENSOFASで始まるヘッダーはそのままにしてください。私は誰かが私は似たような状況のために(しかし、異なるフォーマットのヘッダのために)使用することを提供するPythonスクリプトを持って

>OFAS009268-RA-EXON07 |design:coreoidea-v1,designer:forthman,probes-locus:OFAS009268-RA-EXON07,probes-probe:,probes-source:Clavigralla_tomentosicollis_gi_512427643_gb_GAJX01006991.1_OFAS009268-RA-EXON07 
CATTGCAGCAACTAACAGAGTTGATATATTAGATCCAGCCCTTCTCCGATCAGGCAGGCTAGACAGAAAAATTGAATTTCCTCATCCAAATGAAGATGCCCGTGCTCGAATTATGCAAAT 
>OFAS016134-RA-EXON02 |design:coreoidea-v1,designer:forthman,probes-locus:OFAS016134-RA-EXON02,probes-probe:,probes-source:Anasa_tristis_comp3229_c0_seq1_OFAS016134-RA-EXON02 
AGGGCTTGTGATTCCCTTGAGCACATCGCAAGCCTCTGTTCTAGACAAAACATTCCACATTTGGTCAATAATGCTTTTGGTTTGCAAAGTGCACGTCTCATGCATTTAATTCAAGAGGCT 
>ENSOFAS009761_p2 |design:coreoidea-v1,designer:forthman,probes-locus:ENSOFAS009761,probes-probe:2,probes-source:Anoplocnemis_curvipes_contig5129 
TTAAGAATCTCGAGAAAACCCCTCAGGATGATGAATTACTTGAAATATATGCTCTCTATAAACAAGCAACTGTAGGAGACTGTGACACAAGTAAGCCTGGGATGTTTGATTTCAAAGGGA1 
>uce-3225_p7 |design:hemiptera-v1,designer:faircloth,probes-locus:uce-3225,probes-probe:7,probes-source:halhal1,probes-global-chromo:Scaffold629,probes-global-start:410155,probes-global-end:410275,probes-local-start:0,probes-local-end:120 
AAATCCATCAAGAAATACCAACAACAACTTAAGGATGTCCAGACCGCACTCGAGGAAGAACAAAGAGCTAGGGATGATGCCCGAGAACAACTTGGTATTGCCGAAAGGCGAGCCAACGCT 
>Anasa_tristis_comp8051_c0_seq1_A_0 
ATCCTCCTGATTGGGCAGAAATTTTGAACCATTTTCGAGGGTCTGAACTTCAGAATTATTTTACAAAAATTTTGGAGGATGACCTTAAAGCCCTTATCAAGCCTCAGTATGTCGACCAAA 
>Anasa_tristis_comp8051_c0_seq1_B_0 
TAACGTCCTAGGTTAGGTTTCTGTTTACCAGCTAAAATCTTGAGGGCTGTAGACTTTCCAATGCCATTAGTTCCAACCAGACCTAAAACTTCTCCTGGTCTTGGAATTGGAAGTCTGTGG 

:新しい変更file1.fastaファイルは、のようになります。私は、Python言語に精通していないし、この新しい目的のためにこのスクリプトを修正できる方法があるかどうか不思議です。

#!/usr/bin/env python 

import sys 
import re 

original_fn = sys.argv[1] 
company_fn = sys.argv[2] 

pattern = '(uce | ENSOFAS | _[AB]_[0-9]+$)' 

map = {} 

with open(original_fn, "r") as original_fh: 
    for line in original_fh: 
     if line.startswith('>'): 
      try: 
       (k, v) = line.strip().split('|') 
       # remove trailing space from key 
       k = k[:-1] 
       map[k] = v 
      except ValueError as err: 
       k = line.strip() 
       map[k] = None 

with open(company_fn, "r") as company_fh: 
    for line in company_fh: 
     if line.startswith('>') and not re.search(pattern, line.strip()): 
      try: 
       (k, v) = line.strip().split('|') 
       # remove trailing character from key 
       k = k[:-1] 
      except ValueError as err: 
       k = line.strip() 
      if k not in map: 
       sys.stdout.write("%s\n" % (k)) 
      else: 
       sys.stdout.write("%s |%s\n" % (k, map[k])) 
     else: 
      sys.stdout.write("%s" % (line)) 
+0

入力ファイルとその入力ファイルからの出力の例を提供してください。現在、あなたが提供したものに基づいて、非常に詳細ですが、実際にあなたが使っているものを見るのは難しいです。 –

+0

私はどのようにサンプルファイルを添付することはできませんが、ポストにはこれらの例があります。 –

+0

あなたは>がヘッダーを進め、遺伝子コードが同じファイルに含まれていると言っていますか?私は非常にはっきりしていないと思っています。なぜ今までに誰も答えてくれなかったのです。私はその正規表現の問題の良い例だと思います。 –

答えて

0

私はあなたがそれだけで、次のされて必要なものを今理解した場合:

#!/usr/bin/env python 

import sys 

original_fn = sys.argv[1] 
company_fn = sys.argv[2] 

fpOriginal = open(original_fn, "r") 

for lineCompany in open(company_fn, "r").readlines(): 
    if lineCompany.startswith('*'): 
    sys.stdout.write(fpOriginal.readline()) 
    fpOriginal.readline() 
    else: 
    sys.stdout.write(lineCompany) 

fpOriginal.close() 
+0

これは近いです。 sys.argv [1]ファイルのヘッダーを順番に引っ張ってから、 '*>'行をこの順に置き換えています。注文はファイル間で一致しません。さらに、バックグラウンドとして、sys.argv [2]シーケンスは、プローブ設計のためにsys.argv [1]ファイル内のより小さなシーケンスに "切り刻まれ"ました。したがって、各sys.argv [2]ヘッダーは少なくとも2つの対応するsys.argv [1]ヘッダーを置き換えると予想されます。私はそれが理にかなったことを願う –

+0

さて、順序は一致しませんが、遺伝コードは両方のファイルで同じですか?もしそうなら、私は一度に2行を読むことをお勧めします。 2行目を辞書のキーにし、1行目を値にします。それで、置き換えにマッチすると、value、key、value、keyなどのfile1.fastaを読み、*で始まる値をfile2.fastaの辞書の値で置き換えます。その清潔で簡単に従うこと。 –

+0

file1.fastaには、file2.fastaから逆補完されたいくつかのシーケンスがあるので、それらはすべて同一ではありません。しかし、元のシーケンスを持つfile2.fastaを取ることができるスクリプトをすでに用意しておき、file3.fastaの出力にそれらすべての逆補完を作成する必要があります。私は 'cat' file2.fastaとfile3.fastaを使うことができるので、各ヘッダの両方のシーケンスストランドバージョンがあり、file1.fastaとのマッチングに使用できます。しかし、私はまだこれを行うためにあなたのスクリプトを変更する方法を知りません。私はPythonや他のコーディング言語では不幸にも経験はありません。 –

関連する問題