获取F1.fastq中不在F2.fastq中的fastq读取

问题描述 投票:0回答:1

我想获得一个由 F1.fastq 中但不在 F2.fastq 中的 fastq 读取组成的 fastq 文件。

以下代码作为解决方案提供here

needed_reads = []

reads_array = []

chosen_array = []

for x in SeqIO.parse("F1.fastq","fastq"):

        reads_array.append(x)

for y in SeqIO.parse("F2.fastq","fastq"):

        chosen_array.append(y)

needed_reads = list(set(reads_array) - set(chosen_array))

output_handle = open("DIFF.fastq","w")

SeqIO.write(needed_reads,output_handle,"fastq")

output_handle.close()

但是,当 set() 函数在 SeqIO.parse() 的输出上运行时,它不再起作用并产生“不可散列类型:SeqRecord”错误。 SeqIO.parse() 仍然根据 type() 函数生成一个列表类型对象。然而,该列表似乎是不可散列的。如何解决这个问题?

bioinformatics biopython
1个回答
0
投票

简单来说,使用

BioPython
和 UNIX 工具代替
seqtk
,如下所示:

如何从fastq文件中删除读取列表?

首先,使用

grep
从 fastq 文件中提取读取 ID。使用
comm
仅提取要保留的已读名称。

要按 ID 从 fastq 文件中提取读数,请使用

seqtk subseq

提取文件name.lst中名称的序列,每行一个序列名称:

seqtk subseq in.fq name.lst > out.fq

它也适用于

fasta
文件。

或者,使用

BBMap filterbyname.sh
,请参阅 docs:

默认情况下,“filterbyname”会丢弃名称列表中名称的读取,并保留其余内容。要包含它们并丢弃其他的,请执行以下操作:

filterbyname.sh in=003.fastq out=filter003.fq names=names003.txt include=t

另请参阅:

要安装这些工具,请使用

conda
,特别是
miniconda
,例如:

conda create --channel bioconda --name seqtk seqtk
conda activate seqtk
# ... use seqtk here ...
conda deactivate

参考资料:

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