Как я могу устранить ошибку: нет такого файла или каталога - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь прочитать файл FASTA, используя perl, и я хочу поместить каждый заголовок в качестве ключа и каждую последовательность в качестве значения в ha sh. Я написал свои коды, но получил ошибку: нет такого файла или каталога. У меня есть файл fasta и файл perl в одном каталоге.

вот мой код

#!/usr/bin/perl
use strict;

my $file = "chicken.fa";
open (my $READ, "<$file") || die "Cannot open $file: $!.\n";

my %seqs = ();
my $header = '';

while (<$READ>){
    my $line = $_;
    chomp($line);
    if ($line eq "") { next; }
    if ($line =~ /^>.+/){
        $line = $header;
    } else {
        $seqs{"$header"} .= $line;
    }
}
close ($READ);

1 Ответ

3 голосов
/ 04 марта 2020

Если вы уверены, что файл с именем chicken.fa существует, существует несколько возможностей.

  1. Неправильный каталог. Как написано, ваш скрипт попытается найти файл chicken.fa в том же каталоге, из которого вы запускаете скрипт Perl. Если файл фактически находится в другом каталоге, он не будет найден.

    if (! -f 'chicken.fa') {
        warn "'chicken.fa' doesn't exist in this directory!";
    }
    

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

cd /directory/where/the/stuff/is
perl the_script.pl

, но это не будет

cd /some/other/directory
perl /directory/where/the/stuff/is/the_script.pl

Разрешение. У вас могут не быть необходимых разрешений, в данном случае разрешения на чтение, чтобы открыть файл.

if (! -r 'chicken.fa') {
    warn "Don't have read permission on 'chicken.fa' file!";
}

Неверная ссылка c ссылка. Возможно, chicken.fa является символической c ссылкой на другое местоположение, и это местоположение не является допустимым файлом.

if (-l 'chicken.fa' && ! -f readlink('chicken.fa')) {
    warn "'chicken.fa' is an invalid symbolic link";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...