首页 > 解决方案 > 如何解决错误:没有这样的文件或目录

问题描述

我正在尝试使用 perl 读取 FASTA 文件,并且我想将每个标头作为键,将每个序列作为值放入哈希中。我写了我的代码,但我得到了错误:没有这样的文件或目录我的 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);

标签: perl

解决方案


如果您确定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
  1. 允许。您可能没有打开文件所需的权限,在这种情况下为读取权限。

    if (! -r 'chicken.fa') {
        warn "Don't have read permission on 'chicken.fa' file!";
    }
    
  2. 错误的符号链接。Maybechicken.fa是指向另一个位置的符号链接,并且该位置不是有效文件。

    if (-l 'chicken.fa' && ! -f readlink('chicken.fa')) {
        warn "'chicken.fa' is an invalid symbolic link";
    }
    

推荐阅读