我有一個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',將會修復答案。 –