perl 文件句柄 *Perl readline() on closed filehandle FILE 或Can’t open file 问题解决方案 )
perl 读取一个文件,然后把读出来的数据写进另一个文件中去!
本人初学perl, 做基于人工智能的蛋白质结构预测课题,最近遇到一个问题,需要把200个单独的 标准fasta 文件(DSBs_10MHA.fasta) 整合到一个Total.fasta文件中,本以为很容易却一直报错,网上查找解决措施未果,自己最后用数组解决循环迭代。
详细过程如下
1. 输入及输出 ,
输入:DSBs_id_list.txt,200个DSBs_XXXXX.fasta, 输出:Total200.fasta.
2. 报错代码
open TOTAL,">>total.fasta" or die " can't creat file";
open ID_LIST,"<DSBs_id_list.txt" or die " can't read file";
foreach my $id (<ID_LIST>)
{
open FASTA,"<seq_fasta/$id.fasta" or die " can't read file";;
while (<FASTA>)
{
print TOTAL "$_\n";
}
close FASTA;
}
close ID_LIST;
close TOTAL;
报错
can’t read file at merge_fasta.pl line 7, <ID_LIST> line 754.
-
网络解决方案;
百度知道: https://zhidao.baidu.com/question/568388108.html
Stack Overflow: https://stackoverflow.com/questions/15014763/readline-on-closed-filehandle
~~然而这些解决方案本人亲试,并无卵用~ ~
-
最终我的解决方案;
用数组代替迭代循环
用数组代替迭代循环
用数组代替迭代循环
!/usr/bin/perl -w
open TOTAL,">>total.fasta" or die " can't creat file";
$ID_LIST = "<DSBs_id_list.txt";
open(IN, $ID_LIST);
@ID_ARRAY = <IN>;
close(IN);
chomp(@ID_ARRAY);
my $id=0 ;
my $cnt = @ID_ARRAY;
while ($id < $cnt)
{
my $complex_id = $ID_ARRAY[$id];
$id++;
$fasta= "<seq_fasta/".$complex_id.".fasta";
open(IN, $fasta);
@FASTA = <IN>;
close(IN);
chomp(@FASTA);
print TOTAL "$FASTA[0]\n$FASTA[1]\n";
}
close TOTAL;
结果正确输出无报错
之前也一直用CSDN的资源,第一次正式分享自己的一些学习经验,希望能帮到一些和我一样初学perl的小伙伴,如有错误请指正,skrskr
Skyline_sun_star
2018 .10 .27 夜 1:20
|
请发表评论