解析Fasta文件时需要帮助将列表转换为字符串。蟒蛇

时间:2018-10-19 00:04:18

标签: python-3.x

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文件时,它会给我一个列表。如何将该列表转换为字符串。

1 个答案:

答案 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