目标:解析由四行字符串组成的fastQ文件:
1)同一行上的ID行(seqID)和可能的注释(comm);
2)DNA或蛋白质序列(seq);
3)额外的线
4)质量(质量)序列,其中每个字符对应于蛋白质或DNA seq(第2行)
问题:如何使用ord()
??
我尝试过:
fastQ中的qual行是一行字符串,我想遍历所有字符串并使用ord()
将它们转换为十进制格式。但是,当我运行一个产生seqID
seq
qual
和comm
的生成器时,我似乎无法在我定义的qual = ord(block[3])
中投入这些新解析的变量,因为当我尝试解析我的fastQ文件时出现以下错误:
Traceback (most recent call last):
File "fast_splitter_v1.py", line 91, in <module>
for q in split:
File "fast_splitter_v1.py", line 28, in read_fastq
seqID, seq, qual = line1[0][1:], block[1], ord(block[3])
TypeError: ord() expected a character, but string of length 1550 found
我假设这种方式是尝试将ord()
应用于我的文件中的所有qual
个字符(其中有1550个字符)。这似乎是最好的方法,但现在我正在寻找一个有效的解决方案。
这是我的代码:
def read_fastq(f):
'''reads in fastaq file-like object in conventional 4-line NCBI format and
yields a tuple of lists comprising seqID (sequence ID/name/title),
seq (sequence), and qual (monomer read quality)'''
###CONVERT ALL QUAL SCORES TO INTEGER WITH ORD()
lines = f.readlines()
while len(lines) > 3:
block = [lines.pop(0)[:-1] for z in range(4)]
line1 = block[0].split(' ', 1)
if len(line1) ==2:
comm = line1[1]
else:
comm = ''
seqID, seq, qual = line1[0][1:], block[1], block[3]
yield seqID, seq, qual, comm
问题摘要:
使用上面的代码,如何使用ord()
将Qual中的所有内容从ASCII格式转换为十进制格式并保留我的生成器函数?
示例FastQ:
`@SEQ_ID
GATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT
+
!''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC65`
答案 0 :(得分:0)
我可能仍然不理解这个问题,但有什么可以阻止你做如下的最后一行:
yield seqID, seq, map(ord, qual), comm
OR
yield seqID, seq, [ord(c) for c in qual], comm