针对lammps输出的log文件进行数据提取(python/lammps中log文件分析)

不喜欢日常机械式的工作,要学会用自己的头脑来偷懒,省下时间打游戏哈哈哈。

本人也是python初学者(本科主要学java),写的博客也是当下学到的知识,全当做个笔记,一是方便自己日后复习,二也希望有读到本文的大佬指导一二。

首先上部分log文件:

log文件会纪录每步输出的各种能量参数、温度等数据,但我们要把其中一种数据单独拉出来并且绘制成表格,这就需要正则表达式了。

针对log文件中的每行字符串,设置正则表达式:


patten = r'(E_vdwl+s+=+s+[0-9.-]+)' 

search = re.search(patten, line)        
   if search != None:
       print(search.groups())              
       count = count + 1
       search = re.findall(r'([0-9.]+)', line)    
       data[0, count]= float(search[2])    

这里我以提取vdwl为例,将log文件中有vdwl的那一行提取出来,提取该行的数据保存至数组中

全部代码:

import numpy as np
import pandas as pd
import re
file_name = "log.lammps"                        # log 文件名,lammps默认名
max_lines = 10001                            #存数据行数
#模式匹配
patten = r'(E_vdwl+s+=+s+[0-9.-]+)' #寻找范德华能,看需要自己修改可输出哪一条数据
f = open(file_name,"r")
data = np.zeros((1,max_lines))    #创建数组, 需要提几种数据就新建几维数组来存
count=-1
for i in range(1,max_lines):
    line = f.readline()     #按行读取
    if re.match(r'(Total wall)', line) != None:     #判断是否是正常跑完的log文件
        break
    search = re.search(patten, line)        #寻找对应字条的数据
    if search != None:
        print(search.groups())              #打印分组验证用
        count = count + 1
        search = re.findall(r'([0-9.]+)', line)    #寻找对应字条的数据   search对象找到三组数据(dihed、impro、vdwl)
        data[0, count]= float(search[2])    #存入数组  取search的第三组数据(vdwl)
        #...
        #...要几种数据就在这里加
     
data=data[:,0:count]    #去除多余0位
data_pd = pd.DataFrame(data)
writer = pd.ExcelWriter('vdwl.xlsx')  #以excel表格形式输出,方便origin分析
data_pd.to_excel(writer, 'sheet1', float_format='%.4f')
writer.save()
writer.close()

注意保存的行数是你输出的数据组数加一组初始状态数据。

最后结果:

 

excel的数据和log文件中想要的数据对比,一模一样,这样就可以做下一步分析了。

如果觉得还不错,可以点个赞嘛,一起学习一起进步。 

 

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>