Skillversitas

Sequence I/O Operations

Bio.SeqIO is the standard interface for reading and writing sequence files in dozens of formats: FASTA, GenBank, EMBL, FASTQ, and more. The pattern is uniform: parse iterates SeqRecord objects, read loads one, and write/write_many emit records in a named format.

Parsing Many Records

from Bio import SeqIO

records = list(SeqIO.parse("sequences.fasta", "fasta"))
print(len(records))
for rec in records[:3]:
    print(rec.id, len(rec), rec.description[:40])

parse is a generator - memory-efficient on huge files; do not list() it if you will process records one at a time.

Reading a Single Record

rec = SeqIO.read("single.fasta", "fasta")
print(rec.seq)
print(rec.letters)  # deprecated in newer Biopython; use str(rec.seq)

read is for files with exactly one record; use parse for anything with many.

Writing Records

# one record:
SeqIO.write(rec, "out_single.fasta", "fasta")

# many records:
SeqIO.write(records, "out_all.fasta", "fasta")

Format Conversion

Because the record is format-agnostic, conversion is a read in one format and a write in another:

in_handle = open("sequences.gb", "r")
out_handle = open("sequences.fasta", "w")
count = SeqIO.convert("sequences.gb", "genbank", "sequences.fasta", "fasta")
print(f"converted {count} records")

FASTQ and Quality Scores

for rec in SeqIO.parse("reads.fastq", "fastq"):
    qual = rec.letter_annotations["phred_quality"]
    print(rec.id, len(rec), "minQ", min(qual) if qual else "n/a")

Common Formats

FormatContentTypical use
fastasequence + id/descriptiongeneric sequence exchange
genbanksequence + rich annotation + featuresNCBI submissions, annotated genomes
emblsequence + EMBL annotationEMBL-EBI records
fastqsequence + per-base qualityNGS reads

Summary

Use SeqIO.parse for generators over many records, SeqIO.read for single-record files, and SeqIO.write / SeqIO.convert for output and format conversion. Always pass the format name explicitly, inspect letter_annotations for quality scores in FASTQ, and choose the richest format (GenBank/EMBL) when annotations matter.