1

これまでのところ、Perl についてもう少し理解を深めることができました。これは安心です。皆さんに感謝します。私は現在、.fasta ファイルを読み取り、すべての G および C ヌクレオチドを見つけてから、タブ区切りファイルを作成する必要がある別の側面に取り組んでいます。

これらは、過去数日間の私の投稿で、時系列順です。

  1. タブ区切りのデータから列の値を平均するにはどうすればよいですか... (解決済み)
  2. 出力ファイルに計算結果が表示されないのはなぜですか? (解決済み)
  3. .fasta ファイルを使用してシーケンスの相対コンテンツを計算する
  4. .fasta シーケンスを読み取ってヌクレオチド データを抽出し、次に... (この前の投稿)

最後のクエリはまだ作業中ですが、ある程度の進歩がありました。

背景として、.fasta ファイルは次のようになります。

>label
sequence
>label
sequence
>label
sequence

.fasta ファイルを開く方法がわからないので、どのラベルがどのラベルに適用されるかはわかりませんが、遺伝子にはgagpol、またはenv. 何をしているのかを知るために .fasta ファイルを開く必要がありますか、それとも上記の形式を使用して「盲目的に」行うことができますか?

とにかく、私が持っている現在のコードは次のとおりです。

#!/usr/bin/perl -w
# This script reads several sequences and computes the relative content of G+C of each sequence.

use strict; 

my $infile = "Lab1_seq.fasta";                               # This is the file path
open INFILE, $infile or die "Can't open $infile: $!";        # This opens file, but if file isn't there it mentions this will not open
my $outfile = "Lab1_SeqOutput.txt";             # This is the file's output
open OUTFILE, ">$outfile" or die "Cannot open $outfile: $!"; # This opens the output file, otherwise it mentions this will not open

my $sequence = ();  # This sequence variable stores the sequences from the .fasta file
my $GC = 0;         # This variable checks for G + C content

my $line;                             # This reads the input file one-line-at-a-time

while ($line = <INFILE>) {
    chomp $line;                      # This removes "\n" at the end of each line (this is invisible)

    if($line =~ /^\s*$/) {         # This finds lines with whitespaces from the beginning to the ending of the sequence. Removes blank line.
        next;

    } elsif($line =~ qr(^\s*\#/)) {        # This finds lines with spaces before the hash character. Removes .fasta comment
        next; 
    } elsif($line =~ /^>/) {           # This finds lines with the '>' symbol at beginning of label. Removes .fasta label
        next;
    } else {
        $sequence = $line;
    }

    $sequence =~ s/\s//g;               # Whitespace characters are removed
    print OUTFILE $sequence;
}

コードは、空白なしでシーケンス全体をテキスト ファイルに出力するようになりました。唯一の問題は、シーケンスがどこで開始または終了したかがわからないため、各遺伝子にどのシーケンスが適用されるかがわからないことです. 停止/開始コドンは私に指示を与えるはずですが. それを考慮して、コードを変更/追加して、シーケンス内の G + C の量を計算し、それぞれの G/C コンテンツに関連付けられた遺伝子の名前を含むタブ区切りファイルに出力する方法を教えてください。 ?

G / Cを見つけてそれぞれの数を集計する方法に関して、上記のコードと同様の方法でガイダンスを提供できる人からの連絡を楽しみにしています.

4

2 に答える 2

2

次のリンクが役立つ場合があります。すでにたくさんのコードが書かれていて、Bio::SeqIOBio::Seqは頻繁に議論されているようです。BioPerlのWebサイトがありますが、私はよく知りません。そこにはコード例やその他の情報があります。FAQも役に立ちます。

これは、Bio::SeqIOドキュメントのサンプルです。

use Bio::SeqIO;

$in  = Bio::SeqIO->new(-file => "inputfilename" ,
                       -format => 'Fasta');
$out = Bio::SeqIO->new(-file => ">outputfilename" ,
                       -format => 'EMBL');

while ( my $seq = $in->next_seq() ) {
        $out->write_seq($seq);
}
于 2012-03-18T18:52:03.270 に答える
1

私自身、実際にFASTAファイルを扱っています。だから、私はあなたの痛みを感じます。

各シーケンスへのラベルの適用可能性に関する繰り返しの質問に答えるには、ファイルが正しくフォーマットされている場合、シーケンス情報の前にある各ラベルは、後続のシーケンス用である必要があります。したがって、次のようにファイルを最初から最後まで解析する必要があります。

>label1
sequence1
>label2
sequence2
>label3
sequence3
...

... ここで、各ラベルは新しい配列情報が続くことを示します。また、セミコロン ( ) で始まる行も無視する必要があり;ます。これは、従来のコメント フィールドも示しているためです。

そうしないと、ファイルをリフローするときに空白を適切に削除しているように見えます。ラベル フィールドを改行してそのままにしておくことをお勧めします。これにより、出力ファイルは、コメントと空白が削除された上記の形式のようになります。

これがあれば、リフローされたファイルをたどり、必要なシーケンス ピースを取得し、新しいラベルに遭遇するたびにカウンターを再起動するだけです。

于 2012-03-17T22:47:55.553 に答える