技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
biopython-sequence-io【数据与研究】Use Biopython to read/write/convert biological sequence files (FASTA/GenBank/FASTQ, etc.) and perform basic sequence operations; use when you need reliable sequence I/O, lightweight sequence manipulation, or scalable processing of large sequence datasets.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Bio.Seq.Seq (slicing, reverse complement, transcription/translation).Bio.SeqIO for parsing and writing FASTA/GenBank/FASTQ and other supported formats.SeqIO.index) for large files.biopython>=1.80numpy>=1.21Create config/task_config.json:
{
"input_path": "data/input.fasta",
"input_format": "fasta",
"output_path": "data/output.gb",
"output_format": "genbank",
"min_length": 200,
"max_ambiguous": 0,
"index_db_path": "data/index.sqlite"
}
Run:
python scripts/sequence_io.py
scripts/sequence_io.py (runnable end-to-end):
import json
from pathlib import Path
import numpy as np
from Bio import SeqIO
def gc_fraction(seq: str) -> float:
s = seq.upper()
if not s:
return 0.0
return float((s.count("G") + s.count("C")) / len(s))
def ambiguous_count(seq: str) -> int:
# Treat anything outside A/C/G/T/U as ambiguous for simple filtering.
allowed = set("ACGTU")
return sum(1 for ch in seq.upper() if ch not in allowed)
def main() -> None:
config_path = Path("config/task_config.json")
with config_path.open("r", encoding="utf-8") as f:
cfg = json.load(f)
input_path = Path(cfg["input_path"])
input_format = cfg["input_format"]
output_path = Path(cfg["output_path"])
output_format = cfg["output_format"]
min_length = int(cfg.get("min_length", 0))
max_ambiguous = int(cfg.get("max_ambiguous", 10**9))
output_path.parent.mkdir(parents=True, exist_ok=True)
kept = 0
lengths = []
# Stream records to avoid loading the entire file into memory.
with output_path.open("w", encoding="utf-8") as out_handle:
for record in SeqIO.parse(str(input_path), input_format):
seq_str = str(record.seq)
if len(seq_str) < min_length:
continue
if ambiguous_count(seq_str) > max_ambiguous:
continue
# Example: attach simple stats as annotations (useful for GenBank output).
record.annotations["gc_fraction"] = gc_fraction(seq_str)
SeqIO.write(record, out_handle, output_format)
kept += 1
lengths.append(len(seq_str))
summary = {
"input_path": str(input_path),
"output_path": str(output_path),
"kept_records": kept,
"length_min": int(np.min(lengths)) if lengths else 0,
"length_max": int(np.max(lengths)) if lengths else 0,
"length_mean": float(np.mean(lengths)) if lengths else 0.0,
}
Path("config").mkdir(parents=True, exist_ok=True)
with Path("config/summary.json").open("w", encoding="utf-8") as f:
json.dump(summary, f, ensure_ascii=False, indent=2)
if __name__ == "__main__":
main()
Configuration convention
config/task_config.json as an intermediate artifact.python scripts/<task_name>.py.-- parameters; prefer config files for reproducibility.encoding="utf-8". JSON output must use ensure_ascii=False.Parsing and writing
SeqIO.parse(path, format) for streaming iteration over records.SeqIO.write(records_or_record, handle, format) to serialize records.Large-file strategies
SeqIO.index(input_path, format) (creates an on-disk index depending on backend); this avoids loading all sequences into memory.Filtering/statistics
min_length, maximum ambiguous characters, and quality-based criteria for FASTQ.(count(G)+count(C))/length on an uppercased sequence string; handle empty sequences safely.Reference
references/sequence_io.md for additional notes and format-specific behaviors.biopython_sequence_io_result.md unless the skill documentation defines a better convention.Run this minimal verification path before full execution when possible:
No local script validation step is required for this skill.
Expected output format:
Result file: biopython_sequence_io_result.md
Validation summary: PASS/FAIL with brief notes
Assumptions: explicit list if any