计算化学公社

标题: 求助:想通过python脚本把LAMMPS输出的产物文件改为便于作图的excel文件 [打印本页]

作者
Author:
pumpkin111    时间: 2024-9-5 15:22
标题: 求助:想通过python脚本把LAMMPS输出的产物文件改为便于作图的excel文件
本帖最后由 pumpkin111 于 2024-9-5 15:25 编辑

我是用LAMMPS做聚合物热解。因为用的不是reaxff,所以不能直接输出species文件。通过对轨迹文件进行处理,得到的产物文件打开后是这样的:
0 H6C3O1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1
1 H6C3O1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1
2 H6C3O1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1
3 H6C3O1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1
4 H6C3O1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1


但是这样的数据没法直接做图,我想通过python脚本改成这样:
#Timestep     No_Moles     No_Specs     H6C3O1     Ag
0          65          2         1         64
#Timestep     No_Moles     No_Specs     H6C3O1     Ag
1          65          2         1         64
#Timestep     No_Moles     No_Specs     H6C3O1     Ag
2          65          2         1         64
#Timestep     No_Moles     No_Specs     H6C3O1     Ag
3          65          2         1         64
#Timestep     No_Moles     No_Specs     H6C3O1     Ag
4          65          2         1         64


然后因为我本身不太会编程,让chatGPT写了脚本,如图片:


但是一直出现报错:ValueError: invalid literal for int() with base 10: 'Ag1'请问各位老师,这是什么原因呢?应该怎么更改脚本才能得到我想要的结果呢?




作者
Author:
含光君    时间: 2024-9-5 16:23
一般来说只要把报错拷给chatgpt给他改就好了。报错贴完整,这都没法一眼看出在哪儿报错了。
另外,看上去你的体系分子数也没变化呀,没反应力场那成分也不变咯,如果模拟中没有deposit或者remove分子,自己拿第一行数一数不就好了。
作者
Author:
pumpkin111    时间: 2024-9-5 17:41
含光君 发表于 2024-9-5 16:23
一般来说只要把报错拷给chatgpt给他改就好了。报错贴完整,这都没法一眼看出在哪儿报错了。
另外,看上去 ...

报错拷给chatGPT之后,修改后的脚本还是报错,而且是同样的报错。然后这个体系只是拿来做一个示例,看一下脚本能否运行成功
作者
Author:
乐平    时间: 2024-9-6 09:41
本帖最后由 乐平 于 2024-9-6 09:44 编辑

使用 ChatGPT 来辅助编程的关键在于你能否准确描述你的诉求

把你的诉求描述得越详细,步骤越精确,得到的代码才是能执行的。
说得再直白一些,你需要告诉 chatGPT 一步一步如何做,每一步得到什么信息,最终呈现什么效果。

作者
Author:
乐平    时间: 2024-9-6 13:09
本帖最后由 乐平 于 2024-9-6 13:12 编辑

你的例子其实比较简单,只需要逐行读取文件的信息成列表。
然后,列表的第一列都是 TimeStep,从列表的第二列开始都是需要统计的信息,统计所有的分子数,分子的种类,每种分子的个数。

你希望最终保存的文件可以用 Excel 打开,那么可以保存成 .csv 格式的文件,即用逗号分隔每行的信息。文本文件打开的时候如下:
  1. #TimeStep, No_Molecules, No_Species, H6C3O1, Ag
  2. 1, 65, 2, 1, 64
  3. 2, 65, 2, 1, 64
  4. 3, 65, 2, 1, 64
  5. 4, 65, 2, 1, 64
复制代码


用 Excel 打开的时候如下图所示:
(, 下载次数 Times of downloads: 8)


我写的脚本可以指定你的输入文件名(默认是 lammps.dat,你可以改输入文件名)输出的文件名(也可以不指定,默认是 results.csv)

用法如下:
  1. python parse_lammps.py -f 你的输入文件名 -o 你的输出文件名
复制代码


还可以用 -h 来查看帮助,例如:
  1. python parse_lammps.py -h
  2. usage: parse_lammps.py [-h] [-f <LAMMPS file>] [-o <output .csv file>]

  3. Parse lammps file

  4. options:
  5. -h, --help show this help message and exit
  6. -f <LAMMPS file>, --input_filename <LAMMPS file>
  7. The LAMMPS file
  8. -o <output .csv file>, --output_filename <output .csv file>
  9. The csv file
复制代码


另外,关于扩展性。我还测试了一下元素种类更多的情况。比如在你的输入文件里添加了 H2

  1. 0 H6C3O1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 H2 H2 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1
  2. 1 H6C3O1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 H2 H2 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1
  3. 2 H6C3O1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 H2 H2 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1
  4. 3 H6C3O1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 H2 H2 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1
  5. 4 H6C3O1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 H2 H2 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1 Ag1
复制代码


我的脚本同样也适用

(, 下载次数 Times of downloads: 10)


作者
Author:
pumpkin111    时间: 2024-9-6 20:42
乐平 发表于 2024-9-6 13:09
你的例子其实比较简单,只需要逐行读取文件的信息成列表。
然后,列表的第一列都是 TimeStep,从列表的第 ...

非常感谢大佬,我运行并且得到了想要的结果。真的非常感谢!
作者
Author:
pumpkin111    时间: 2024-9-19 11:03
本帖最后由 pumpkin111 于 2024-9-19 11:07 编辑
乐平 发表于 2024-9-6 13:09
你的例子其实比较简单,只需要逐行读取文件的信息成列表。
然后,列表的第一列都是 TimeStep,从列表的第 ...

老师,如果模拟得到的Species文件用excel文件打开是这样的页面,也就是说不是把每一个分子都列出来,而是每一个分子类型后加上该分子类型的数量。
  1. Timestep        6500:        [H]        64        [H][H]        31        [H][O][H]        27        [H][C]([H])[H]        1        [C]        3
  2. Timestep        6600:        [H]        69        [H][H]        32        [H][O][H]        27        [H][C]([H])[H]        1        [H][O]        11
  3. Timestep        6700:        [H]        68        [H][H]        30        [H][O][H]        28        [H][C]([H])[H]        1        [O]        1
  4. Timestep        6800:        [H]        61        [H][H]        32        [H][O][H]        29        [H][C]([H])[H]        2        [O]        1
  5. Timestep        6900:        [H]        59        [H][H]        30        [H][O][H]        28        [H][C]([H])[H]        1        [O]        2
  6. Timestep        7000:        [H]        63        [H][H]        31        [H][O][H]        29        [H][C]([H])[H]        1        [H][O]        5
  7. Timestep        7100:        [H]        61        [H][H]        34        [H][O][H]        27        [H][C]([H])[H]        1        [O]        5
  8. Timestep        7200:        [H]        60        [H][H]        35        [H][O][H]        27        [H][C]([H])[H]        1        [O]        5
  9. Timestep        7300:        [H]        53        [H][H]        37        [H][O][H]        26        [H][C]([H])[H]        1        [O]        4
  10. Timestep        7400:        [H]        61        [H][H]        35        [H][O][H]        26        [O]        5        [H][O]        11
  11. Timestep        7500:        [H]        58        [H][H]        38        [H][O][H]        29        [H][C]([H])[H]        1        [O]        3
  12. Timestep        7600:        [H]        61        [H][H]        36        [H][O][H]        28        [O]        2        [H][O]        10
  13. Timestep        7700:        [H]        69        [H][H]        35        [H][O][H]        26        [H][C]([H])[H]        2        [O]        4
  14. Timestep        7800:        [H][H]        38        [H]        65        [H][O][H]        27        [O]        3        [H][O]        12
  15. Timestep        7900:        [H][H]        41        [H]        61        [H][O][H]        27        [O]        4        [H][O]        11
  16. Timestep        8000:        [H]        70        [H][H]        38        [H][O][H]        28        [O]        5        [H][C]        11
复制代码

那么该如何修改py脚本从而得到希望最终保存的csv文件呢?





欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3