Biopython не может объявить новый SeqRecord

75
7

from Bio import SeqIO
import re, os
import pandas as pd
from Bio.Seq import Seq
from Bio.Alphabet import generic_dna
from Bio.SeqRecord import SeqRecord
os.chdir('c:\Users\Workspace\Desktop')

filename = os.path.join(os.getcwd(),'convertedgisaid','df.dat')
df = pd.read_table(filename, header=None, sep=' ',low_memory=False)
df.columns = ['GID','IsolateID','Carrier','Country','HN','Type','Date','Segment','Gene','Length','ETC','SEQ']

f_in = os.path.join(os.getcwd(),'convertedgisaid','annotationFULL.tbl')
f_out = os.path.join(os.getcwd(),'convertedgisaid','gisaid_influenza.cds')
file = open(f_in,'r')
records = file.read().split('>Feature ')
file.close()
records = records[1:]
f = open(f_out,'w')
start=1
end=0
for rec in records:
withoutNewline = re.sub("\n"," ",rec)
GID = re.match('\d{1,6}',withoutNewline).group()
Details = df[df.GID==GID]
Seq = list(Details.SEQ)[0]
codingSeq=''
codingDetails = ''
cdsSegment = re.findall("((?:\d{1,4} |<\d{1,4} >|\d{1,4} >)\d{1,4} CDS)",withoutNewline)
for cds in cdsSegment:
cdsSplit = cds.split(' ')
if(cdsSplit[0][0]=="<" or cdsSplit[1][0]==">"):
if(cdsSplit[0][0]=="<"):
start = cdsSplit[0][1:]
else:
start = cdsSplit[0]
if(cdsSplit[1][0]==">"):
end = cdsSplit[1][1:]
else:
end = cdsSplit[1]
else:
start = cdsSplit[0]
end = cdsSplit[1]
codingDetails+=cdsSplit[0]+'-'+cdsSplit[1]+','
codingSeq+=Seq[(int(start)-1):int(end)]
codingDetails = codingDetails[:-1]
curSeq = codingSeq.upper()
curId = GID
curDesc = ":"+codingDetails+"Influenza "+list(Details.Type)[0]+" virus ("+list(Details.ETC)[0]+" (" +list(Details.HN)[0]+"))"
cdsRecords = SeqRecord(Seq(curSeq, generic_dna), id=curId, description=curDesc)
SeqIO.write(cdsRecord,f,"fasta")
f.close()

Следующий код показывает следующую ошибку:

Traceback (последний последний вызов): Файл "", строка 1, в TypeError: объект "str" не является вызываемым Тема: Biopython не может объявить новый SeqRecord

Могу я узнать, что с ним не так? Я использую Bio Python.

спросил(а) 2021-01-19T18:13:13+03:00 2 месяца, 3 недели назад
1
Решение
87

При обращении за помощью в Stackoverflow всегда старайтесь уменьшить свою проблему до минимального, полного и проверяемого примера.

Если вы это сделаете, вы увидите, что у вас есть следующий импорт:

from Bio.Seq import Seq

но далее в вашей программе вы определяете переменную Seq следующим образом

Seq = list(Details.SEQ)[0]

Итак, теперь Seq больше не является функцией из Bio.Seq, а является строкой.

Итак, когда вы пытаетесь выполнить SeqRecord(Seq(curSeq, generic_dna), id=curId, description=curDesc) вы получаете TypeError поскольку Seq больше не может быть вызван.

Таким образом, решение состоит в том, чтобы переименовать вашу переменную Seq в другое, чтобы она не Bio.Seq.Seq импортированный Bio.Seq.Seq больше.

ответил(а) 2021-01-19T18:13:13+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема