使用Perl从文件中读取数据

时间:2013-08-06 05:09:46

标签: 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;

我面临的问题是所提供的代码不会打印出数据。蛋白质序列数据文件'NM_021964fragment.pep'位于我的桌面上,即使我指定了它不读取文件的位置。

是否有想法让代码运行?

3 个答案:

答案 0 :(得分:2)

首次打开diag消息时打开失败。这是Perl方式:

open PROTEINFILE, $proteinFileName or die $!;

有些问题:

  • 启动Perl程序的当前工作目录是什么?
  • 如果是上面的例子,你应该cd到pep文件所在的目录。
  • 您是否从命令行启动脚本?
  • 在Windows计算机上是否恰好是Cygwin-Perl?

接下来,&lt;&gt;操作员从文件中读取一行。 如果文件有多行并且您想要将整个文件读入字符串,则需要一个循环来将所有行连接到其中:

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

答案 1 :(得分:1)

我认为问题可能是因为你的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);

答案 2 :(得分:0)

您的代码会读取文件的第一行 使用File::Slurp模块将整个文件读入变量 OR ,请尝试下面的代码。

# !/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;

man perlvar

  

$ /输入记录分隔符,默认为换行符。 [...]您可以将其设置为“undef”以读取文件末尾。