将Dump文件原子类型编号改为元素的python脚本

将Dump文件原子类型编号改为元素的python脚本

在这里插入图片描述

1、代码说明

MD开展某些计算的时候需要知道原子的元素,虽然lammps输出dump文件的时候可以修改type的id为元素,但是有时候都算完了才想起来要更改,重算是不可能重算的。本代码提供python脚本进行文本处理,将dump文件中原子类型更改为元素。

2、Python代码

写代码水平有限,能够实现所需功能即可,凑合着用呗~

# -*- coding: utf-8 -*-
"""
Created on Sun Feb 27 17:26:09 2022

@author: 阿磊的MD记录簿

description: 替换原子类型为元素符号
"""

import datetime
steps = 50000
interval = 10000
number = int(steps)/int(interval)+1                                               

start_time = datetime.datetime.now()
#读取数据,并获取基本信息
count = []                                                                        # count记录重复时的行数
try:
    with open('./nvt.dump','r') as f_1:
        lines = f_1.readlines()                                                   
        number_of_atoms = int(lines[3])                                           
        num = len(lines)                                                          
        for i, line in enumerate(lines):
            if line.startswith('ITEM: TIMESTEP'):                            
                count.append(i)
except IOError:
    print ("Error: 没有找到文件或读取文件失败")
else:
    print ("内容写入文件成功")
    
# 保存原子信息
with open('./atoms.txt','w') as f_2:
    f_2.write('\n')                                                             
    f_2.write('\n')
    f_2.write('\n')                                                             
    f_2.write('\n')
    f_2.write('\n')                                                             
    f_2.write('\n')
    f_2.write('\n')                                                             
    f_2.write('\n')
    f_2.write('\n')                                                             
    for j in range(int(number)):
        cont_j = count[j]      
        for i in range(cont_j+9,cont_j+9+number_of_atoms):
            f_2.write(lines[i])           
        f_2.write('\n')                                                         
        f_2.write('\n')
        f_2.write('\n')
        f_2.write('\n')
        f_2.write('\n')
        f_2.write('\n')
        f_2.write('\n')
        f_2.write('\n')
        f_2.write('\n')

# 读取原子信息
with open('./atoms.txt','r') as f_3:
    originalMessage = f_3.readlines()                                             
numberMessageLines = len(originalMessage)                                         
lineNumber = 0
ID = []
Type = []       
data_pos = []

while numberMessageLines > lineNumber:                                            
    singleLine = originalMessage[lineNumber]                                      
    a = singleLine.split()
    b = a[2:]                                                                     # b为原子坐标信息
    data_pos.append(b)
    c = a[1:2]                                                                    # c为原子类型信息
    Type.append(c)
    e = a[:1]
    ID.append(e)                                                               
    lineNumber += 1

with open('./IDAndTypeAndPosition.txt','w') as f_4:                                                             
    for i in range(numberMessageLines):                                           # list存入txt操作
        data_new = str(ID[i]) + ' ' +str(Type[i]).replace('1','O').replace('2','H')\
        + ' ' + str(data_pos[i]) + '\n'
        f_4.write(data_new)

# 写入head
with open('./IDAndTypeAndPosition.txt','r') as f_5: 
    data_final = f_5.readlines()    
    for i in range(int(number)):
        Startline = (number_of_atoms+9)*i
        data_final[Startline] = lines[Startline]
        data_final[Startline+1] = lines[Startline+1]
        data_final[Startline+2] = lines[Startline+2]
        data_final[Startline+3] = lines[Startline+3]
        data_final[Startline+4] = lines[Startline+4]
        data_final[Startline+5] = lines[Startline+5]
        data_final[Startline+6] = lines[Startline+6]
        data_final[Startline+7] = lines[Startline+7]
        data_final[Startline+8] = lines[Startline+8]
with open('./Fianl_water.xyz','w') as f_6:
    for i in range(len(data_final)):
        final_XYZ = str(data_final[i]).replace('[', '').replace(']', '').replace("'", '').replace(',', '')
        f_6.write(final_XYZ)

print("All right")
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿磊的MD和CFD记录簿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值