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
| Format | Content | Typical use |
|---|---|---|
| fasta | sequence + id/description | generic sequence exchange |
| genbank | sequence + rich annotation + features | NCBI submissions, annotated genomes |
| embl | sequence + EMBL annotation | EMBL-EBI records |
| fastq | sequence + per-base quality | NGS 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.