#python #biopython #fasta
#python #biopython #fasta
Вопрос:
У меня есть два файла, human.fa и protein-coding_gene.txt (содержит сотни различных сведений о белках). Я должен проанализировать через кодирующий белок ген, а затем проанализировать через human.fa (10 названий белков), чтобы объединить их в новый файл fasta.
protein-coding_gene.txt:
Protein1 PreviousNames1 PreviousSymbols1 Symbol1 Chromosome1
Protein2 PreviousNames2 PreviousSymbols2 Symbol2 Chromosome2
human.fa:
>Protein1 Sequence1
>Protein2 Sequence2
Мне нужен новый файл fasta для вывода:
>Protein1 Synonyms1 Chromsome1 Sequence1
>Protein2 Synonyms2 Chromosome2 Sequence2
Мой текущий код:
class Protein:
def __init__(self, Name, Synonyms, Chromosome):
self.Name = Name
self.Synonyms = Synonyms
self.Chromosome = Chromosome
Proteins = []
with open('protein-coding_gene.txt', 'r') as file:
for line in file:
parseline = line.rstrip().split("t")
Name = parseline[2]
Synonyms = parseline[6]
Chromosome = parseline[7]
Proteins.append(Protein(Name, Synonyms, Chromosome))
f = open("human.fa")
seqs = {}
for i in f:
line = i.strip()
if line[0] == '>':
l = line.split()
gene = l[0][1:]
seqs[gene] = ''
else:
seqs[gene] = seqs[gene] line
f.close()
for p in Proteins:
print(p.Name, p.Synonyms, p.Chromosome, sep=",")
for name, seq in seqs.items():
print (name, seq)
from Bio import SeqIO
newhuman = []
SeqIO.write[newhuman, "fastaML.fa", "fasta")
Прямо сейчас он печатает все из файла, кодирующего белок, который я хочу (имя, синонимы, хромосома), и печатает весь файл human.fa. Мне нужно, чтобы он сортировал и печатал только 10 имен белков файла fasta с информацией из protein-coding_gene.txt и последовательность действий. Любая помощь будет оценена.
Ответ №1:
Требуемый формат не является допустимым форматом fasta. Но если вы все еще хотите получить тот же результат fastaML.fa
, вам не следует использовать метод SeqIO.write() . Скорее вы должны использовать базовую обработку файлов.
class Protein:
def __init__(self, Name, Synonyms, Chromosome):
self.Name = Name
self.Synonyms = Synonyms
self.Chromosome = Chromosome
def add_sequence(self, Sequence):
self.Sequence = Sequence
Proteins = []
with open('protein-coding_gene.txt', 'r') as file:
for line in file:
parseline = line.rstrip().split(" ")
Name = parseline[0]
Synonyms = parseline[1:4]
Chromosome = parseline[4]
Proteins.append(Protein(">" Name, Synonyms, Chromosome))
f = open("human.fa")
seqs = {}
gene = ""
for i in f:
line = i.strip()
if line[0] == '>':
l = line.split()
gene = l[0]
seqs[gene] = l[1]
else:
seqs[gene] = seqs[gene] line
f.close()
for p in Proteins:
for name, seq in seqs.items():
if(p.Name == name):
p.add_sequence(seq)
with open('fastaML.fa', 'w') as file:
for p in Proteins:
file.write(p.Name " " p.Synonyms[0] " " p.Synonyms[1] " " p.Synonyms[2] " " p.Chromosome " " p.Sequence "n")
#I have used single space here. You can modify it as per your need.
Комментарии:
1. Спасибо за вашу помощь. Я получил ошибку AttributeError, если вы можете помочь мне увидеть, где она находится.
2. Я проверил ваше предложение, но я должен отклонить эти изменения, поскольку это общий ответ, который дает представление читателю и может помочь кому-то даже в будущем. Глядя на ваш код, я могу сказать, что ошибка атрибута вызвана
seqs[gene] = ''
тем, что вы оставляете его пустым. Скорее, вы должны сделатьseqs[gene] = l[1]
3. Но тогда у вас появится еще одна ошибка,
file.write()
поскольку она не принимает несколько параметров. Вот почему я использовал в нем операцию конкатенации.