python - Biopython 无法声明新的 SeqRecord

标签 python bioinformatics biopython

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 (most recent call last): File "", line 1, in TypeError: 'str' object is not callable Topic:Biopython unable to declare new SeqRecord

我可以知道它有什么问题吗?我正在使用 Bio Python。

最佳答案

在 Stackoverflow 上寻求帮助时,请始终尝试将您的问题减少到 Minimal, Complete, and Verifiable example .

如果你这样做,你会看到你有以下导入:

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

关于python - Biopython 无法声明新的 SeqRecord,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41857318/

相关文章:

python - 在 Python 和 Ubuntu 中调用命令行工具

python - Needleman-Wunsch 算法动态规划实现中的回溯

python - 循环处理错误/异常

Python线程和多处理错误?

r - 从数据框创建数据框

python - 频率加起来不为一

python - 当我从网络上运行 CGI 脚本时,为什么 python 找不到某些模块?

python - BCBio 的 GFF 解析器解析不正确

python - 两个数据帧的 Pandas 合并的输出不会产生预期的形状

python - 如何在 Python 中对两个列表进行异或?