SMI转PKL文件报错:UnpicklingError问题排查与解决建议
问题解决建议
错误根源
你遇到的UnpicklingError是因为.pkl文件里存储的不是pickle序列化的有效数据,而是.smi文件的文本内容(或错误对象)。你的转换代码直接把文件路径字符串file_pathdump到了pkl文件里,完全没有读取.smi文件的实际内容,这是核心问题。
修正后的转换代码
先读取.smi文件的内容(按行解析,拆分SMILES字符串和对应的标识),再序列化到.pkl文件:
import pickle as pkl # 读取.smi文件内容 smiles_dataset = [] with open("你的smi文件路径.smi", "r", encoding="utf-8") as smi_f: for line in smi_f: line = line.strip() if not line: continue # 拆分SMILES字符串和后面的标签(按第一个空格分割) smiles_str, tag = line.split(maxsplit=1) smiles_dataset.append({"smiles": smiles_str, "tag": tag}) # 写入.pkl文件 with open("输出的pkl文件路径.pkl", "wb") as pkl_f: pkl.dump(smiles_dataset, pkl_f, protocol=pkl.HIGHEST_PROTOCOL)
正确的加载代码
import pickle as pkl with open("你的pkl文件路径.pkl", "rb") as f: qm9_smiles = pkl.load(f)
额外注意事项
- 先删除之前生成的错误.pkl文件,避免覆盖问题
- 如果.smi文件的行格式和示例不同(比如分割符不是空格),需要调整
split的逻辑适配你的文件格式
内容的提问来源于stack exchange,提问作者Rose Vanilla
相关产品推荐
相关产品推荐

