我有一个fastq文件,说reads.fastq
。我有一个7-mer
字符串的列表。对于reads.fastq
中的每个读取,我想检查它是否至少包含列表中的7-mer
字符串中的一个。条件是,如果发现匹配(hamming distance ==0
),则读取被写入数组chosen_reads
,并且从fastq文件中读取的下一个匹配被匹配。如果找不到匹配,则循环继续直到找到匹配。输出数组由唯一的读取组成,因为一旦找到第一个匹配,匹配循环就会终止。我写了下面的代码,但输出数组中的读数不是唯一的,因为所有与汉明距离为零的匹配都被报告。请提出修改建议:选择与汉明距离零读取
def hamming(s1, s2):
#Return the Hamming distance between equal-length sequences
if len(s1) != len(s2):
raise ValueError("Undefined for sequences of unequal length")
return sum(ch1 != ch2 for ch1, ch2 in zip(s1, s2))
for x in Bio.SeqIO.parse("reads.fastq","fastq"):
reads_array.append(x)
nmer = 7
l_chosen = ['gttattt','attattt','tgctagt']
chosen_reads = []
for x in reads_array:
s2 = str(x.seq)
for s in [s2[i:i+nmer] for i in range(len(s2)-nmer-1)]:
for ds in l_chosen:
dist = hamming(ds,s)
if dist == 0:
print s2, s,ds,dist
chosen_reads.append(x)
我删除的spead最后,如果breakFlag:打破;因为这不是通过读取迭代,其他建议工作。我希望将整个记录写入chosen_reads以备后用 – Ssank
哦,对不起,不,你不需要最后一个'如果breakFlag',将会修复答案。 –