ASE只保留C原子,删除其他原子,并重新保留为POSCAR 代码
时间: 2024-03-08 20:49:15 浏览: 26
好的,以下是可以实现你所要求的 Python 代码:
```python
import numpy as np
# 读取原始POSCAR文件
with open('POSCAR', 'r') as f:
lines = f.readlines()
# 获取原子种类及数量
atom_types = lines[5].split()
atom_nums = np.array(list(map(int, lines[6].split())))
# 获取原子坐标
coords = []
for line in lines[8:]:
coord = list(map(float, line.split()[:3]))
coords.append(coord)
# 将坐标转换为numpy数组
coords = np.array(coords)
# 获取C原子的索引
c_indices = [i for i in range(len(atom_types)) if atom_types[i] == 'C']
# 保留C原子并重新生成POSCAR
new_lines = lines[:7]
new_lines.append('C\n')
new_lines.append(' '.join(map(str, atom_nums[c_indices])) + '\n')
new_lines.append('Cartesian\n')
for i in c_indices:
new_lines.append(f'{coords[i, 0]:.8f} {coords[i, 1]:.8f} {coords[i, 2]:.8f}\n')
with open('new_POSCAR', 'w') as f:
f.writelines(new_lines)
```
你可以将原始的POSCAR文件命名为`POSCAR`,然后运行以上代码,即可生成仅包含C原子的新的POSCAR文件`new_POSCAR`。