如何在BioPerl结构中只迭代少数记录而不是全部记录

  • 本文关键字:记录 全部 迭代 BioPerl 结构 perl
  • 更新时间 :
  • 英文 :


我从perl开始,编写这个脚本是为了读取文件。但是文件包含超过10k行,如何将读取限制在5行,或者在第5行和第10行之间?

my $pdb = Structure->new(
-file => 'arq.txt',
-format => 'PB'
);
my $strutur = $pb->next_structure;
foreach my $chain ($strutur->get_chains) {
my $chain_id = $chain->id;
foreach my $residue ($strutur->get_residues($chain)) {
my $residue_id = $residue->id;
print "Chain: ".$chain_id."tResidue: ".$residue_id."n";
}
}

首先,我尝试显示五行并打破循环。

use strict;
while(my $strutur = $pb->next_structure)  {   
print "Chain: ".$chain_id."tResidue: ".$residue_id."n";    
last if $. == 5;
}
close $pb;

并获得输出Global symbol "$strutur" requires explicit package name (did you forget to declare "my $estrutura"?)
然后我尝试了

use strict;
while( my $residue_id = $residue->id)  {   
print "Chain: ".$chain_id."tResidue: ".$residue_id."n";    
last if $. == 5;
}
close $residue;

只需第一行就可以实现无限循环

看起来这都是BioPerl的一部分。我对此一点都不熟悉,但很容易找到文档。

你还不完全清楚你只想要哪一部分的5个。所以,让我们仔细研究一下你的代码,看看你能做些什么;我如何阅读5行";因为这段代码抽象了文件格式中的行。我们在这里谈论的是一些实体。我对生物学一无所知,也不知道这些东西的用途。

my $pdb = Structure->new(
-file => 'arq.txt',
-format => 'PB'
);
# (1) This gives you one structure. Call this again, and you'll get another one. 
my $strutur = $pb->next_structure;
# (2) This returns all the chains and iterates them, we can limit these
foreach my $chain ($strutur->get_chains) {
my $chain_id = $chain->id;
# (3) This returns all residues in a chain and iterates them.
#     We can limit these too.
foreach my $residue ($strutur->get_residues($chain)) {
my $residue_id = $residue->id;
print "Chain: ".$chain_id."tResidue: ".$residue_id."n";
}
}
}

我们可以做三件不同的事情。其中一些可以通过各种方式解决。

  1. 每次调用$pb->next_structure时,都会得到一个新的结构。如果你想要其中的五个,可以调用五次,或者循环执行。我不认为你在说这个。

  2. get_chains()方法返回与一个结构相关联的所有链。我不知道这两个是什么,但我们可以很容易地使它只迭代其中的5个。

    my @chains = $strutur->get_chains;
    for my $i ( 0 .. 4 ) {
    my $chain = $chains[$i];
    my $chain_id = $chain->id;
    # ...
    

    如果要获取记录5到9,则需要将其更改为4 .. 8。索引总是从零开始。要得到5,然后是下一个5,你需要做0 ... 4,然后做5 .. 9,依此类推

  3. 要只处理5次重拨,基本上可以执行与2中相同的操作。

最新更新