Je suis nouveau en utilisant biopython... J'essaie d'écrire un dictionnaire dans un fichier, en utilisant biopython. Voici mon code :

with open("file_in.fasta") as original, open("file_out.fasta", "w") as corrected:
    for seq_record in SeqIO.parse(original,'fasta'):
        desc=seq_record.description
        seq_dict={seq_record.id + '_1':seq_record.seq}
        SeqIO.write(seq_dict.values(),corrected,'fasta')

Mais j'obtiens cette erreur : AttributeError : l'objet 'Seq' n'a pas d'attribut 'id'

1
Sofia 27 janv. 2020 à 14:49

1 réponse

Meilleure réponse

Compte tenu de votre objectif de vouloir ajouter _1 à la fin de chaque ligne >, vous n'avez pas besoin d'un dictionnaire, vous pouvez simplement modifier l'enregistrement de séquence directement :

from Bio import SeqIO

with open("file_in.fasta") as original, open("file_out.fasta", "w") as corrected:
    for seq_record in SeqIO.parse(original,'fasta'):
        seq_record.description += '_1'
        seq_record.id = seq_record.description.split()[0]
        SeqIO.write(seq_record, corrected, 'fasta')

Il est important de modifier à la fois .description et .id comme ceci

Notez que ce serait également une tâche simple avec des outils unix comme sed, vous n'avez pas vraiment besoin de Biopython à moins que vous ne fassiez autre chose aussi.

2
Chris_Rands 27 janv. 2020 à 12:40