Синтаксический анализ двух файлов для объединения данных и создания нового файла Fasta

#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.
  

Вот рабочий repl для вашей справки.

Комментарии:

1. Спасибо за вашу помощь. Я получил ошибку AttributeError, если вы можете помочь мне увидеть, где она находится.

2. Я проверил ваше предложение, но я должен отклонить эти изменения, поскольку это общий ответ, который дает представление читателю и может помочь кому-то даже в будущем. Глядя на ваш код, я могу сказать, что ошибка атрибута вызвана seqs[gene] = '' тем, что вы оставляете его пустым. Скорее, вы должны сделать seqs[gene] = l[1]

3. Но тогда у вас появится еще одна ошибка, file.write() поскольку она не принимает несколько параметров. Вот почему я использовал в нем операцию конкатенации.