raku - 需要在 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
解决方案
一次从 2 个文件中读取 4 行并将它们处理成一个东西,可以很容易地使用zip
and完成batch
:
my @filenames = <file1 file2>;
for zip @filenames.map: *.IO.lines.batch(4) {
# expect ((a,b,c,d),(e,f,g,h))
}
这将继续生成,直到至少有一个文件被完全处理。另一种方法batch
是rotor
:当两个文件完全填满 4 行时,这将继续进行。完成循环的其他方法还包括:partial
用 , 指定标志rotor
并使用roundrobin
代替zip
。YMMV。
推荐阅读
- java - Maven多线程构建问题
- emeditor - Em-Editor 自定义 TSV
- javascript - 在每个模态中延迟加载前后图像滑块
- css - CSS 子选择器 - 选择第一个嵌套元素
- python - if (None in string) 返回真还是假?
- sql - 具有修改值的重复记录(行)(Postgresql)
- angular - Firestore:删除多个文档尝试再次删除同一个文档
- r - 将列中具有相同值的行合并到数据框中的单行
- python - Python:字节数组到 ctypes 数组
- sas - 检验均值相等的假设。使用 PROC MEANS 生成四个组的描述性统计数据