我的目标是接收DNA序列中出现的'g'时间。
我使用列表理解通过Biopython导入了一个DNA序列
seq = [record for record in SeqIO.parse('sequences/hiv.gbk.rtf', 'fasta')]
然后我尝试在新创建的列表comp变量
上使用.count()方法print(seq.count('g'))
我收到一条错误,内容为
NotImplementedError:故意不是SeqRecord比较 实现。明确比较感兴趣的属性。
任何人都知道这个故事是什么? Biopython的手册说所有标准的python方法都应该有效。
答案 0 :(得分:2)
您正尝试将count
应用于列表。您需要将其应用于每个元素的序列,例如
print(seq[0].seq.count('g'))
或者如果你想得到所有序列的总和
print(sum([s.seq.count('g') for s in seq]))
这是一个最小的工作示例
from Bio import SeqIO
txt = """>gnl|TC-DB|O60669|2.A.1.13.5 Monocarboxylate transporter 2 - Homo sapiens (Human).
MPPMPSAPPVHPPPDGGWGWIVVGAAFISIGFSYAFPKAVTVFFKEIQQIFHTTYSEIAW
>gnl|TC-DB|O60706|3.A.1.208.23 ATP-binding cassette sub-family C member 9 OS=Homo sapiens GN=ABCC9 PE=1 SV=2
MSLSFCGNNISSYNINDGVLQNSCFVDALNLVPHVFLLFITFPILFIGWGSQSSKVQIHH
>gnl|TC-DB|O60721|3.A.1.208.23 Sodium/potassium/calcium exchanger 1 OS=Homo sapiens GN=SLC24A1 PE=1 SV=1
MGKLIRMGPQERWLLRTKRLHWSRLLFLLGMLIIGSTYQHLRRPRGLSSLWAAVSSHQPI
>gnl|TC-DB|O60779|2.A.1.13.5 Thiamine transporter 1 (THTR-1) (ThTr1) (Thiamine carrier 1) (TC1) - Homo sapiens (Human).
MDVPGPVSRRAAAAAATVLLRTARVRRECWFLPTALLCAYGFFASLRPSEPFLTPYLLGP"""
filename = 'sequences.fa'
with open(filename, 'w') as f:
f.write(txt)
seqs = [record for record in SeqIO.parse(filename, 'fasta')]
print(sum([s.seq.count('P') for s in seqs]))
>>> 21
print(seqs[0].seq.count('P'))
>>> 9