在Raku中每n行需要阅读文本文件的建议

问题描述 投票:4回答:2

我正在寻找有关如何在Raku / perl6中按第n个文件读取文本文件的建议。

在生物信息学研究中,有时我们需要以比直接方式少的方式来解析文本文件。例如Fastq文件,一次以4行为一组存储数据。甚至更多,这些Fastq文件成对出现。因此,如果我们需要解析此类文件,则可能需要执行以下操作:从第一个Fastq文件读取4行,从第二个Fastq文件读取4行,然后从第一个Fastq文件读取接下来的4行,然后读取第二个fastq文件中的下4行,...

关于解决此问题的最佳方法是什么,我有什么建议? Raku的“ IO.lines”方法似乎能够一次处理每一行。但不确定如何处理每第n行

fastq文件对示例:https://github.com/wtwt5237/perl6-for-bioinformatics/tree/master/Come%20on%2C%20sister/fastq我们之前使用“ IO.lines”尝试过的操作:https://github.com/wtwt5237/perl6-for-bioinformatics/blob/master/Come%20on%2C%20sister/script/benchmark2.p6

raku
2个回答
5
投票

[使用C0和C0可以轻松地一次从2个文件中读取4行并将它们处理为一件事情]]

zip

这将继续产生,直到至少一个文件被完全处理。 batch的替代值是my @filenames = <file1 file2>; for zip @filenames.map: *.IO.lines.batch(4) { # expect ((a,b,c,d),(e,f,g,h)) } :当两个文件完全填满4行时,它将继续进行。完成循环的其他方法是也用batch指定rotor标志,并用:partial代替rotor。 YMMV。


3
投票

您可以使用roundrobin方法。 Raku zip很懒。这意味着对lines之类的表达式进行迭代只会将一行读入内存,而不会读取整个文件。为了进行后者,您需要将Sequence分配给"somefile".IO.lines

© www.soinside.com 2019 - 2024. All rights reserved.