Task tutorial
Create an SDF library from a SMILES CSV with Python
Write valid CSV rows as local SDF records while keeping every input row and parse error in a CSV report.
You will make
A molecules.sdf file for valid records plus molecule-report.csv that preserves the CSV row, name, SMILES, status, and error.
Steps
- Create molecules.csv with name and smiles columns, then keep a source copy.
- Parse each row locally, attach source_row and source_smiles SD properties, and write only valid structures to the SDF.
- Write molecule-report.csv for every source row before filtering or interpreting output.
import csv
import chematic
report = []
with open("molecules.csv", newline="", encoding="utf-8") as src, \
+ chematic.SDWriter("molecules.sdf") as sdf:
for source_row, row in enumerate(csv.DictReader(src), start=2):
smiles = row.get("smiles", "").strip()
name = row.get("name", "").strip() or f"row_{source_row}"
try:
mol = chematic.from_smiles(smiles)
mol.SetProp("_Name", name)
mol.SetProp("source_row", str(source_row))
mol.SetProp("source_smiles", smiles)
sdf.write(mol)
report.append({"source_row": source_row, "name": name, "smiles": smiles, "status": "written", "error": ""})
except ValueError as error:
report.append({"source_row": source_row, "name": name, "smiles": smiles, "status": "invalid_smiles", "error": str(error)})
with open("molecule-report.csv", "w", newline="", encoding="utf-8") as out:
writer = csv.DictWriter(out, fieldnames=["source_row", "name", "smiles", "status", "error"])
writer.writeheader()
writer.writerows(report)Expected result
With ethanol, benzene, and incomplete C1CC inputs, molecules.sdf contains two V2000 records. molecule-report.csv has all three source rows; C1CC is marked invalid_smiles rather than disappearing.
If it does not work
SDF records are written only after parsing succeeds. Preserve the source CSV and inspect molecule-report.csv before treating a missing record as a chemical result. Generated 2D coordinates and SD fields do not prove identity, stereochemical intent, material provenance, safety, or experimental validity.