我有这个巨大的(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)
在进入下一个随机整数之前,我不知道如何到达文件中的下三行。有人能帮助我吗?
答案 0 :(得分:1)
这个想法是你可以从一个没有随机访问的生成器中进行采样,通过遍历它并依次选择(或不选择)每个元素。
答案 1 :(得分: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)