gene_finder()应该 包含DNA序列的文件的名称,从文件中读取该序列,标识ORF 在该序列中长于min_len(一个数字),%GC含量超过minGC(一个分数), 对于超过最低要求的每个ORF,返回其长度,其%GC含量的列表, 以及DNA序列本身。如果有多个ORF,则这应该是列表的列表。
def get_orf(DNA):
codon = ''
if(DNA[0:3] == 'ATG'):
codon = DNA[0:3]
for x in range(3,len(DNA)+1,3):
if DNA[x:x+3] == "TAG" or DNA[x:x+3] == "TAA" or DNA[x:x+3] == "TGA":
return codon
else: codon = codon + DNA[x:x+3]
if codon[-3:] in ["TAG", "TAA", "TGA"]:
return codon
else:
return 'No ORF'
def one_frame(DNA):
x = 0
ORFlist = []
while x < len(DNA):
codon = DNA[x:]
if codon.startswith('ATG'):
ORF = get_orf(DNA[x:])
if ORF:
ORFlist.append(ORF)
x += len(ORF)
else:
x += 3
return(ORFlist)
def find_all_orfs(DNA):
ORFlist = []
x = one_frame(DNA)
b = one_frame(DNA[1:])
c = one_frame(DNA[2:])
ORFlist = x+b+c
return ORFlist
def gene_finder(file_name, min_len, minGC):
x = open(file_name)
contents = x.readlines()
GCCount = 0
ORFlen = []
GCContent = []
while contents.len > min_len:
ORF = one_frame(contents)
ORFlen.append(len(ORF))
for x in contents:
if x == 'G' or x == 'C':
GCCount += ((x/len(contents))*100)
GCContent.append(GCCount)
x.close
return ORFlen, GCContent, contents
其他所有内容似乎都正常运行。我遇到的问题是gene_finder()函数。我对使用python进行编码是相当陌生的。我不一定是读取和解析fasta文件的专家。每当我在控制台中调用该函数时,都会出现以下错误:'AttributeError:'list'对象没有属性'replace'。我知道是因为当我打开fasta文件时,它会给我一个列表。如何将该列表转换为字符串。
答案 0 :(得分:1)
您应该使用字符串方法.join(iterable)
。
必须在将作为分隔符的字符串上调用它,因为列表是可迭代的,因此您可以轻松地将列表转换为字符串:
>>> data = ["A", "B", "C"]
>>> ",".join(data)
'A,B,C'
对于您的特定情况,分隔符为""
(空字符串),它将把["A", "B", "C"]
变成"ABC"
。
您并没有真正显示或解释出此错误的出处,因此我无法提供更多信息,您也不会在提供的代码中的任何地方调用.replace()
。
编辑:如果您需要将不是字符串的列表转换为字符串,例如[1, 2, 3]
要获得"123"
,必须首先将每个元素都转换为字符串,最好的方法可能是data = [str(item) for item in data]
,现在数据包含字符串,您可以根据需要.join()
。带有循环的该列表称为list comprehension。