Чтение последовательностей .fasta для извлечения данных нуклеотидов, а затем запись в файл TabDelimited - PullRequest
2 голосов
/ 17 марта 2012

Прежде чем продолжить, я решил отослать читателей к моим предыдущим проблемам с Perl, будучи новичком во всем этом.

Это были мои посты за последние несколько дней в хронологическом порядке:

  1. Как усреднить значения столбцов из данных, разделенных табуляцией ... (решено)
  2. Почему яне видите вычисленных результатов в моем выходном файле? (решено)
  3. Использование файла .fasta для вычисления относительного содержания последовательностей

Теперь, как я уже говорил выше, благодаря помощи нескольких из вас, мне удалось выяснить первые два запроса, и я действительно извлек из них урок.Я действительно благодарен.Для человека, который ничего не знает об этом и все еще чувствует, что не знает, помощь была практически находкой.

Последний запрос остается нерешенным, и это продолжение.Я посмотрел некоторые из рекомендуемых текстов, но, поскольку я пытаюсь закончить это до понедельника, я не уверен, что что-то упустил полностью.В любом случае, я попытался выполнить задачу.

Просто чтобы вы знали, задача состоит в том, чтобы открыть и прочитать файл .fasta (я думаю, что я наконец-то прибил что-тоочень хорошо, аллилуйя!), читать каждую последовательность , вычислять относительное содержание нуклеотидов G + C , а затем записывать в файл TABDelimited и имена генов и ихсоответствующее содержание G + C .

Даже если я попытался это сделать, я знаю, что я далеко не готов выполнить программу, чтобы получить результаты, к которым я стремлюсь, поэтому я обращаюсь квы, ребята, снова за какое-то руководство или примеры того, как это сделать.Как и в случае с моими предыдущими решенными запросами, я бы хотел, чтобы он был в стиле, аналогичном тому, в котором я их уже делал, хотя это может быть не самым удобным / эффективным способом.Это просто позволяет мне знать, что я делаю на каждом этапе пути, даже если мне кажется, что я спамлю!

Во всяком случае, файл .fasta выглядит примерно так:

>label
sequence
>label
sequence
>label
sequence

Я не уверен, как открыть файл .fasta, поэтому я не уверен, какие ярлыки применяются к каким, ноЯ знаю, что гены должны быть помечены либо gag, pol, либо 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)

    foreach my $line ($infile) {
        if($line = ~/^\s*$/) {         # This finds lines with whitespaces from the beginning to the ending of the sequence. Removes blank line.
            next;
        } elsif($line = ~/^\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
        return $sequence;
    }

Я не уверен, что здесь что-то правильно, но выполнение его оставило меня с ошибкой синтаксиса в строке 35 (послепоследняя строка, и, следовательно, там ничего нет!).Это сказано в «EOF».Это все, на что я могу указать.В противном случае я пытаюсь выяснить, как вычислить количество нуклеотидов G + C в каждой из последовательностей, а затем правильно составить таблицу в выходном файле .txt.Я полагаю, что это означает файл TABDelimited?

В любом случае, я прошу прощения, если этот запрос кажется слишком длинным, «тупым» или повторением, но, сказав, что я не смог найти какой-либоинформация, непосредственно относящаяся к этому, так что ваша помощь будет высоко ценится, и объяснения для каждого шага, если это возможно !!

Добрейший.

1 Ответ

2 голосов
/ 17 марта 2012

У вас есть дополнительная скобка прямо в конце.Это должно работать:

#!/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 =~ /^\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;
}

Также я отредактировал вашу обратную строку.Возвращение выйдет из вашего цикла.Я подозреваю, что вы хотите, чтобы распечатать его в файл, поэтому я сделал это.Возможно, вам сначала потребуется выполнить дополнительное преобразование, чтобы преобразовать его в разделенный табуляцией формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...