格式转换与信息保留¶
format_transform 方法可在 FileBatchModelDisk 和单个文件对象上使用,用于在不同化学文件格式之间转换,并尽量保留目标格式能够表达的结构信息。
参数默认值、返回值与错误策略见 API 契约。
Python
from molop import AutoParser
batch = AutoParser("results/*.out", n_jobs=1)
rendered = batch.format_transform("xyz", frame=-1, write_to_disk=False)
返回值是从每个绝对源路径映射到渲染文本的 mapping;当
embed_in_one_file=False 时,值可以是字符串列表。此模式不会创建输出文件。
Python
from pathlib import Path
from molop import AutoParser
Path("structures").mkdir(parents=True, exist_ok=True)
batch = AutoParser("results/*.out", n_jobs=1)
batch.format_transform(
"xyz",
output_dir="structures",
write_to_disk=True,
)
批量 Python API 要求 output_dir 已存在;CLI 会创建 --output-dir。两种 API 都只替换
源文件的最后一个后缀。
Warning
目标格式无法表达的属性不会被转换保留。需要保留成键数据时使用支持分子图的格式;需要 保留能量或频率时使用支持 QM 数据的目标格式。
核心行为¶
- 帧选择:默认情况下,仅转换最后一帧 (
frame=-1)。可以指定frame="all"或一组帧 ID 来转换更多帧。 - 合并输出:如果
embed_in_one_file=True(默认),多个帧将合并到一个输出文件中(如果格式支持,如 SDF 或多帧 XYZ)。 - 文件输出:Python API 需要显式传入
write_to_disk=True才会写盘。写盘时,file_path或 batch 的output_dir用于选择输出位置;如果没有提供路径,则写到 源文件所在目录。输出文件名仅替换最后一个后缀,例如转换为 XYZ 时,name.hash.log会变为name.hash.xyz。write_to_disk=False时,file_path和output_dir会被忽略, 转换只返回渲染字符串或字符串列表。 - 结构层级:
- COORDS (坐标级):
xyz、gjf和orcainp等格式主要保留原子坐标和元素信息。 - GRAPH (图级):
sdf、smi和cml等格式保留成键信息(分子图)。如果源文件仅包含坐标(例如.log文件),MolOP 将自动尝试使用其内置算法重建分子图。
- COORDS (坐标级):
- 元数据保留:
gjfwriter 会保留结构化 Gaussian 指令和关键字。orcainpreader 会把 ORCA 关键词、块和几何段解析到 frame 字段;已注册的 canonical writer 可用显式keywords、资源和 block 从带坐标 frame 构建新输入,但不承诺原文无损 round-trip。- 转换为简单的坐标格式(如 XYZ)时,计算属性(能量、频率)通常不会保留,尽管某些格式(如 SDF)可以将其作为属性存储。