Python 使用更改的元组写入文件

Python 使用更改的元组写入文件,python,python-3.x,bioinformatics,biopython,Python,Python 3.x,Bioinformatics,Biopython,我的代码在一个DNA序列中运行,并记录它在该序列中遇到的ORF的位置。我正在努力完成两件事 使程序循环,直到它找到所有ORF,而不是它运行的第一个ORF 将结果写入文本文件 我将其设置为将结果写入文本文件,但结果存储在元组中(每次在序列中找到ORF时,元组都会发生变化)。这使得最后的文本文件只包含输入的最后一个序列的最后一个ORF,而不是创建列表 我的代码: class SeqAnalyzer : def __init__(self,sequence): self.inp

我的代码在一个DNA序列中运行,并记录它在该序列中遇到的ORF的位置。我正在努力完成两件事

  • 使程序循环,直到它找到所有ORF,而不是它运行的第一个ORF
  • 将结果写入文本文件
  • 我将其设置为将结果写入文本文件,但结果存储在元组中(每次在序列中找到ORF时,元组都会发生变化)。这使得最后的文本文件只包含输入的最后一个序列的最后一个ORF,而不是创建列表

    我的代码:

    class SeqAnalyzer :
        def __init__(self,sequence):
            self.input = Seq(sequence)
            self.reverse = self.input.reverse_complement()
            self.sequence = str(self.input)
            self.stopcodons = ["TAG", "TAA", "TGA"]
            self.start = 'ATG'
            self.length = 0
            self.result = ("+",0,0,0,0)
    
        def codon(self,frame):
            start = frame
            while start +3 <=len(self.sequence):
                    yield (self.sequence[start:start+3],start)
                    start += 3
    
    
        def ORF(self, frame, direction):
            orf_beg = 0
            for i, index in self.codon(frame):
                if (
                    (str(i) in self.start) or
                    (not self.start and i not in str(self.stopcodons))
                    ):
                        orf_beg = index + 1
                elif i in self.stopcodons:
                    orf_ending = index + 3
                    length = (orf_ending - orf_beg) + 1
                    if length > self.length:
                        self.length = length
                        self.result = (direction, frame, orf_beg, orf_ending, length)
                    break
    
        def direction(self):
            direction = "+"
            for frame in range(3):
              self.ORF(frame, direction)
            direction = "-"
            for frame in range(3):
                self.sequence = self.reverse
                self.ORF(frame, direction)
            self.results()
    
        def results(self):
            print(self.result)
            file = open("tass2ORFdata-ATG-100.txt","w")
            file.write("{}{:d} {:>5d}..{:>5d} {:>5d}".format(
                    self.result[0], self.result[1], self.result[2],
                    self.result[3], self.result[4])
                    )
    
    而不是元组在不同点包含的所有变体:

    ('+', 0, 4, 9, 6)
    ('+', 1, 5, 10, 6)
    ('+', 0, 0, 6, 7)
    ('-', 0, 4, 9, 6)
    ('-', 1, 5, 10, 6)
    ('+', 2, 0, 11, 12)
    ('+', 0, 4, 9, 6)
    ('+', 1, 5, 10, 6)
    ('+', 0, 0, 6, 7)
    ('-', 0, 4, 9, 6)
    ('-', 1, 5, 10, 6)
    ('+', 1, 0, 13, 14)
    

    我已经尝试了各种方法来解决这个问题,但到目前为止还没有一种方法有效。

    在您的
    \uuuu init\uuu
    集中

        self.result = [("+",0,0,0,0), ]
    
    然后,您需要将
    附加到它,而不是分配给
    self.result

    self.result.append(direction, frame, ... )
    
    然后在打印时:

    for row in self.result:
        file.write("...".format(row))
    

    在您的
    \uuuu init\uuuu
    集中

        self.result = [("+",0,0,0,0), ]
    
    然后,您需要将
    附加到它,而不是分配给
    self.result

    self.result.append(direction, frame, ... )
    
    然后在打印时:

    for row in self.result:
        file.write("...".format(row))