0%

cif格式转换vasp格式python脚本(cif_to_vasp)

依赖

python 3

Atomic Simulation Environment

脚本内容

1
2
3
from ase import io
atoms = io.read(jobname+'.cif')
atoms.write('POSCAR', format = 'vasp')

基于ase的三行脚本即可将.cif文件转换为vasp格式文件,然而由于ase包的问题,转换后的POSCAR文件第六行缺少对应的元素符号,需额外通过python脚本处理生成好的POSCAR文件来达到最终目的。

完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from ase import io
import os

#获取当前目录下全部.cif文件名称,其他目录下的.cif需要给出完整路径并且用os.chdir改变工作路径
files_bak = os.listdir('./')
files = []
for f in files_bak:
if f[-4:] == '.cif':
files.append(f)
else:
continue
#先将所有的cif用ase转换为poscar文件,并删除原来的cif文件
for i in files:
atoms = io.read(i)
atoms.write('temp.vasp', format = 'vasp')
os.remove(i)
#将现有的cif文件第六行加上第一行的元素符号,存为最终的POSCAR文件
f = open(i[0:-4]+'.vasp','w')
with open('temp.vasp','r') as p:
os.remove('temp.vasp')
#在readlines()读取元素时,不必将每个元素结尾的\n用.strip()函数去掉,因为再次写入会自动达到换行效果
lines = p.readlines()
lines.insert(5,lines[0])
for l in lines:
f.write(l)
f.close()

可能存在的问题

  • windows平台,MS建好模型后通过坚果云共享到MAC系统中,cif一定几率变成二进制文件报错