上述代码的错误:Traceback (most recent call last): File "10.py", line 12, in <module> atoms = atoms.new_array('positions', [atom.position for atom in c_atoms]) # 更新Atoms对象的位置信息 File "/export/home/anliying/.local/lib/python3.8/site-packages/ase-3.22.1-py3.8.egg/ase/atoms.py", line 460, in new_array if not a.flags['C_CONTIGUOUS']: AttributeError: 'list' object has no attribute 'flags'
时间: 2024-03-09 14:48:13 浏览: 87
Mac下anaconda中Spyder打开报错Traceback(most recent call last)…问题
5星 · 资源好评率100%
这个错误是由于 `new_array` 方法期望的第二个参数是一个 NumPy 数组,而您传递了一个列表。您可以使用 NumPy 库中的 `array` 函数将列表转换为 NumPy 数组,或者使用 `ase.Atoms` 对象中的 `set_positions` 方法来更新原子位置。以下是使用 `set_positions` 方法的示例代码:
```python
from ase.io import read, write
from ase.io.cif import write_cif
import os
# 读取每个POSCAR文件,筛选出C原子并创建CIF文件
for filename in os.listdir('.'):
if filename.startswith('POSCAR'):
atoms = read(filename)
c_atoms = [atom for atom in atoms if atom.symbol == 'C'] # 使用列表推导式筛选C原子
fe_atoms = [atom for atom in atoms if atom.symbol == 'Fe'] # 使用列表推导式筛选Fe原子
atoms.set_positions([atom.position for atom in c_atoms]) # 使用set_positions方法更新原子位置
write_cif('{}.cif'.format(filename.split('.')[0]), atoms=atoms, atoms_per_site=len(c_atoms))
```
在这个修改后的代码中,我们使用 `set_positions` 方法更新了原子位置,而不是使用 `new_array` 方法。`set_positions` 方法期望的参数是一个 NumPy 数组,因此我们使用了列表推导式来创建一个 NumPy 数组,其中包含了 C 原子的位置信息。最后,我们使用更新后的 `Atoms` 对象来创建 CIF 文件。
阅读全文