Biopython: Parse FASTA Files and Transcribe DNA

Biopython provides robust, specialized modules to streamline common bioinformatics workflows, particularly sequence manipulation and file input/output. This guide details how to leverage Bio.SeqIO for reading, iterating through, and processing genomic data stored in FASTA format, as well as how to use the Bio.Seq module to transcribe DNA coding strands into messenger RNA (mRNA).

Parsing FASTA Files with Bio.SeqIO

The standard tool for handling sequence file formats in Biopython is the Bio.SeqIO module. It provides a simple, unified interface for parsing various bioinformatics formats, including FASTA.

The primary function for parsing multi-record files is SeqIO.parse(). It accepts two arguments: the file path (or handle) and the format string (e.g., "fasta"). It returns an iterator that yields SeqRecord objects.

from Bio import SeqIO

# Parse a FASTA file containing multiple sequences
fasta_file = "sequences.fasta"

for record in SeqIO.parse(fasta_file, "fasta"):
    print(f"ID: {record.id}")
    print(f"Description: {record.description}")
    print(f"Sequence Length: {len(record.seq)}")
    print(f"Sequence: {record.seq}\n")

Key features of Bio.SeqIO for FASTA parsing include:

Transcribing DNA to RNA with Bio.Seq

DNA transcription in Biopython is handled by the Seq object located within the Bio.Seq module. Biopython models transcription based on the biological convention where the DNA sequence provided is the coding strand (5' to 3'), meaning transcription simply replaces Thymine (T) bases with Uracil (U).

The .transcribe() method performs this operation directly on a Seq object:

from Bio.Seq import Seq

# Define a coding DNA strand (5' to 3')
dna_seq = Seq("ATGGCCATTGTAATGGGCCGCTGAAAGGGTGCCCGATAG")

# Transcribe DNA to mRNA
mrna_seq = dna_seq.transcribe()

print(f"DNA:  {dna_seq}")
print(f"mRNA: {mrna_seq}")

Biopython also supports reversing this process using the .back_transcribe() method, which converts an RNA sequence back to its corresponding DNA coding strand by replacing U with T.

Combined Workflow: Parsing and Transcribing

In real-world bioinformatics pipelines, parsing and sequence manipulation are typically chained together. You can read sequences directly from a FASTA file and transcribe each one inside the iteration loop:

from Bio import SeqIO

fasta_file = "genes.fasta"

for record in SeqIO.parse(fasta_file, "fasta"):
    mrna = record.seq.transcribe()
    print(f">{record.id} [Transcribed]")
    print(mrna)

Through Bio.SeqIO and the native methods of the Seq object, Biopython reduces complex file parsing and biochemical sequence operations into just a few lines of clean, Pythonic code.