for i, row in enumerate(rows[42160:]): smi = row[8] # 假设 SMILES 数据在第一列 print(smi) rxn = new_func(smi) if rxn is not None: # 绘制反应结构 img = Draw.ReactionToImage(rxn) img.save(f'D:/4/reaction_{i}.png') else: print("Failed to parse rxn_smiles.", smi)
时间: 2024-04-21 20:23:54 浏览: 160
根据你提供的代码,你正在尝试处理一个包含多个反应 SMILES 的数据集。你循环遍历数据集的每一行,并将每个反应 SMILES 字符串传递给 `new_func` 函数进行解析和处理。
然后,你使用 `Draw.ReactionToImage` 函数将解析后的反应对象转换为图像,并保存到指定的文件路径。
如果解析成功,图像将保存在 `D:/4/` 目录下,文件名类似 `reaction_i.png`,其中 `i` 是循环索引。
如果解析失败,你将打印一条错误消息,指示无法解析该反应 SMILES 字符串。
请确保在运行代码之前已正确导入所需的库(如 RDKit)并设置好相应的环境。
如果你遇到任何问题或需要进一步的帮助,请提供更多的信息或错误消息,我将尽力帮助你解决问题。
相关问题
for i, row in enumerate(rows[42160:]): smi = row[8] # 假设 SMILES 数据在第一列 print(smi) rxn = new_func(smi) if rxn is not None: # 绘制反应结构 img = Draw.ReactionToImage(rxn) img.save(f'D:/4/reaction_{i}.png') i=i+1这里i要从42160开始要怎么弄。
要让循环的索引 `i` 从 42160 开,你可以在 `enumerate()` 函数中指定起始索引。下面是修改后的代码示例:
```python
start_index = 42160
for i, row in enumerate(rows[start_index:], start=start_index):
smi = row[8] # 假设 SMILES 数据在第一列
print(smi)
rxn = new_func(smi)
if rxn is not None:
# 绘制反应结构
img = Draw.ReactionToImage(rxn)
img.save(f'D:/4/reaction_{i}.png')
```
在这个示例中,我们使用了 `enumerate(rows[start_index:], start=start_index)` 来指定循环的起始索引为 42160。这样,循环的第一个索引值就会是 42160。
通过这种方式,你可以确保 `i` 的值从 42160 开始递增,与 `rows` 列表中的元素一一对应。
希望这样能帮助到你。如果还有其他问题,请随时提问。
优化下面代码: def get_case_data(self): self.get_keys() # self.keys # 键值对的所有键 while True: row = self.get_next_row() # 键值对的所有值 # print("row", row) if not row: break null_list = [] # 所有空数据的下标集合 for i, v in enumerate(row): # print(i,v) # i 是index v 是value if not v: null_list.append(i) keys = [] values = [] for i in range(len(row)): if i not in null_list: keys.append(self.keys[i]) values.append(row[i]) # print(keys) # print(values) # 快捷方式 组合两个列表成为 dict的方式 caps = dict(zip(keys, values)) # print("kwargs", caps) action_value, *kwargs_values = caps.values() action_key, *kwargs_keys = caps.keys() # print("kwargs_keys:", kwargs_keys) # print("kwargs_values:", kwargs_values) kwargs = dict(zip(kwargs_keys, kwargs_values))
以下是优化后的代码:
```
def get_case_data(self):
self.get_keys()
# self.keys # 键值对的所有键
while True:
row = self.get_next_row() # 键值对的所有值
# print("row", row)
if not row:
break
null_list = [i for i, v in enumerate(row) if not v] # 所有空数据的下标集合
keys = [self.keys[i] for i in range(len(row)) if i not in null_list]
values = [v for i, v in enumerate(row) if i not in null_list]
# print(keys)
# print(values)
# 快捷方式 组合两个列表成为 dict的方式
caps = dict(zip(keys, values))
# print("kwargs", caps)
action_value = caps.popitem()[1]
action_key = self.keys[len(values)]
# print("kwargs_keys:", kwargs_keys)
# print("kwargs_values:", kwargs_values)
kwargs = caps
```
主要优化如下:
1. 使用了列表推导式来更简洁地生成 null_list 和 keys 列表。
2. 通过 caps.popitem() 方法获取 action_value,而不是使用 caps.values() 方法。这样可以更方便地处理 action_key。
3. 使用 self.keys[len(values)] 来获取 action_key,而不是使用 caps.keys()[0] 方法。这样可以更准确地获取 action_key,而不受 caps.keys() 方法返回顺序的影响。
4. 简化了 kwargs 的生成过程,直接使用 caps 字典即可。
阅读全文