1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 针对lammps输出的log文件进行数据提取(python/lammps中log文件分析)

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

时间:2021-04-29 16:40:07

相关推荐

针对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 + 1search = re.findall(r'([0-9\.]+)', line) data[0, count]= float(search[2])

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

全部代码:

import numpy as npimport pandas as pdimport refile_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=-1for i in range(1,max_lines):line = f.readline()#按行读取if re.match(r'(Total wall)', line) != None:#判断是否是正常跑完的log文件breaksearch = re.search(patten, line) #寻找对应字条的数据if search != None:print(search.groups()) #打印分组验证用count = count + 1search = 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文件中想要的数据对比,一模一样,这样就可以做下一步分析了。

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。