首页 > 解决方案 > 需要在 Raku 中的每 n 行读取文本文件的建议

问题描述

我正在寻找一些关于如何通过 Raku/perl6 中的每个第 n 个文件读取文本文件的建议。

在生物信息学研究中,有时我们需要以一种不太直接的方式解析文本文件。例如 Fastq 文件,它一次以 4 行为一组存储数据。更重要的是,这些 Fastq 文件是成对出现的。所以如果我们需要解析这样的文件,我们可能需要从第一个 Fastq 文件中读取 4 行,从第二个 Fastq 文件中读取 4 行,然后从第一个 Fastq 文件中读取接下来的 4 行,然后读取来自第二个 fastq 文件的接下来的 4 行,......

我可以就解决此问题的最佳方法提出一些建议吗?Raku 的“IO.lines”方法似乎能够一次处理每一行。但不确定如何处理每一行

一个示例 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 个文件中读取 4 行并将它们处理成一个东西,可以很容易地使用zipand完成batch

my @filenames = <file1 file2>;
for zip @filenames.map: *.IO.lines.batch(4) {
    # expect ((a,b,c,d),(e,f,g,h))
}

这将继续生成,直到至少有一个文件被完全处理。另一种方法batchrotor:当两个文件完全填满 4 行时,这将继续进行。完成循环的其他方法还包括:partial用 , 指定标志rotor并使用roundrobin代替zip。YMMV。


推荐阅读