使用Perl从文件中读取数据

使用Perl从文件中读取数据,perl,bioinformatics,Perl,Bioinformatics,我在perl中使用了以下代码来打开和读取包含蛋白质数据的文件: # !/usr/bin/perl -w $proteinFileName = 'NM_021964fragment.pep'; open (PROTEINFILE, $proteinFileName); $protein = <PROTEINFILE>; close PROTEINFILE; print "Here is the protein: \n"; print "$protein"; exit; #/usr

我在perl中使用了以下代码来打开和读取包含蛋白质数据的文件:

# !/usr/bin/perl -w

$proteinFileName = 'NM_021964fragment.pep';
open (PROTEINFILE, $proteinFileName);
$protein = <PROTEINFILE>;
close PROTEINFILE;

print "Here is the protein: \n";
print "$protein";
exit;
#/usr/bin/perl-w
$proteinFileName='NM_021964fragment.pep';
开放式(PROTEINFILE,$proteinFileName);
$protein=;
封闭式蛋白质填充;
打印“这是蛋白质:\n”;
打印“$protein”;
出口
我面临的问题是,提供的代码没有打印出数据。蛋白质序列数据文件'NM_021964fragment.pep'位于我的桌面上,即使我指定了位置,它也不会读取该文件


有什么办法让代码运行吗

打开失败时,首先打印诊断消息。这是Perl的方法:

open PROTEINFILE, $proteinFileName or die $!;
一些问题:

  • 启动Perl程序的当前工作目录是什么
  • 对于上面的示例,您应该将cd刻录到pep文件所在的目录
  • 是否从命令行启动脚本
  • 这是否恰好是Windows机器上的Cygwin Perl
接下来,操作员从文件中读取一行。 如果文件有多行,并且希望将整个文件读入字符串,则需要一个循环将所有行连接到其中:

$protein .= $_ while (<PROTEINFILE>);
$protein.=$\uuwhile();

我认为问题可能是由于perl脚本与蛋白质文件不在同一目录中。您可以将其中两个加载到一起,然后重试。如果您想输入文件路径作为参数,您可以这样写:

@ARGV==1 || die"please input the file path";
open(IN, $ARGV[0]) || die "can't open the file $ARGV[0]:$!";
$protein = <PROTEINFILE>; ##get one line once, if you want to get all information, use while loop or like this: @protein = <PROTEINFILE>;
##something you like to do
close(IN);
@ARGV==1 | | die“请输入文件路径”;
打开(在$ARGV[0]中)| | die“无法打开文件$ARGV[0]:$!”;
$protein=##一次获取一行,如果您想获取所有信息,请使用while循环或类似方法:@protein=;
##你喜欢做什么
关闭(IN);

您的代码读取文件的第一行。
使用
File::Slurp
模块将整个文件读取到变量中,或者尝试下面的代码

# !/usr/bin/perl -w
use strict;
my $proteinFileName = 'NM_021964fragment.pep';
my $protein;
{ 
   local $/= undef;

   open (my $PROTEINFILE, '<', $proteinFileName) || die "Can't open";
   $protein = <$PROTEINFILE>;
   close $PROTEINFILE;
}

print "Here is the protein: \n";
print "$protein";
exit;
#/usr/bin/perl-w
严格使用;
my$proteinFileName='NM_021964fragment.pep';
我的$protein;
{ 
本地$/=undef;

打开(我的$proteinfle,'指定位置'是什么意思?检查返回值。检查值。我的意思是,给出文件在我的计算机中的确切位置不会导致读取文件:例如,当我使用以下代码时:$proteinFileName='desktop/perl/NM_021964fragment.pep';我希望现在清楚了为什么不使用绝对完整路径,例如在“c:/user/xx/desktop/perl/NM_021964fragment.pep";这表明在使用整个路径时无法找到文件NM_021964fragment.pep。我不知道在这种情况下会出现什么问题。我认为这解决了使用您在开始时提供的代码后我的部分问题。现在,当我运行程序时,我收到一条错误消息,显示找不到该文件。我我使用Padre editor在Windows机器上运行perl。是否有特定的方法将我的程序定向到文件“NM_021964fragment.pep”以便它可以找到并读取它?我知道该文件是perl Bioinfo文件下的我的桌面。感谢您的帮助您的
,而
循环有点过火
我的$protein;{local$/;$protein=}
@BradGilbert我的overkill循环比你的解决方案还短10个字符。我在Perl高尔夫中获胜了。它也更具可读性。:-)我还可以进一步改善我的缺陷:
$protein.=$\uu;
@MustafaEhsan尝试使用pep文件的绝对路径。
$proteinfile='c:\Users\\Desktop\NM\u 021964fragment.pep'
假设Windows 7。我没有尝试最短的代码,而是最快的代码。我的代码以相对较少的操作加载整个文件,你的需要的运算比我使用的要多,并且在每一行输入上都使用它们。此外,如果我去打高尔夫球,我会使用
$protein.=$\ufor;
你需要在设置块之前放置
我的$protein
。@BradGilbert修复了-感谢你发现了不需要的
使用严格;
结果:-)