0

我有这个巨大的 (61GB) FASTQ文件,我想为其创建一个随机子集,但我无法将其加载到内存中。FASTQs 的问题是每四行都属于一起,否则我只会创建一个随机整数列表,并且只将这些整数的行写入我的子集文件。

到目前为止,我有这个:

import random
num = []    
while len(num) < 50000000:
    ran = random.randint(0,27000000)
    if (ran%4 == 0) and (ran not in num):
        num.append(ran)
num = sorted(num)

fastq = open("all.fastq", "r", 4)
subset = open("sub.fastq", "w")
for i,line in enumerate(fastq):
    for ran in num:
        if ran == i:
            subset.append(line)

在转到下一个随机整数之前,我不知道如何到达文件中的下三行。有人能帮我吗?

4

2 回答 2

1
  1. 以四行为一组迭代文件。
  2. 从该迭代器中随机抽取一个样本。

这个想法是,您可以通过遍历它并依次选择(或不选择)每个元素来从生成器中采样而无需随机访问。

于 2013-01-17T09:03:48.647 回答
0

你可以试试这个:

import random
num = sorted([random.randint(0,27000000/4)*4 for i in range(50000000/4)])

lines_to_write = 0
with open("all.fastq", "r") as fastq:
    with open("sub.fastq", "w") as subset:
        for i,line in enumerate(fastq):
            if len(num)==0:
                break
            if i == num[0]:
                num.pop(0)
                lines_to_write = 4
            if lines_to_write>0:
                lines_to_write -= 1
                subset.write(line)
于 2013-01-17T09:05:08.317 回答