Запись в файл с изменением кортежа
Мой код проходит последовательность ДНК и записывает позиции 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])
)
Выходной файл приводит к:
+1 0.. 13 14
вместо всех вариаций кортеж содержит в разных точках:
('+', 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)
Я пробовал различные способы исправить это, но до сих пор ни один метод не работал.
1 ответ
В вашем __init__
задавать
self.result = [("+",0,0,0,0), ]
потом, вместо того, чтобы назначить self.result
вам нужно append
к нему:
self.result.append(direction, frame, ... )
Тогда, когда пришло время печатать:
for row in self.result:
file.write("...".format(row))