python提取OSZICAR中单点能和最后优化的能量
时间: 2024-03-03 14:51:42 浏览: 76
基于Python中单例模式的几种实现方式及优化详解
可以使用Python中的正则表达式库re来提取OSZICAR中的单点能和最后优化的能量。以下是一个示例代码:
```python
import re
# 读取OSZICAR文件
with open('OSZICAR', 'r') as f:
data = f.read()
# 提取单点能
single_energy = None
match = re.search(r'^\s*1\s+[-+]?\d*\.\d+E?[-+]?\d*\s+[-+]?\d*\.\d+E?[-+]?\d*\s*$', data, re.MULTILINE)
if match:
single_energy = float(match.group(2))
# 提取最后优化的能量
final_energy = None
match = re.search(r'^\s*E0=\s+([-+]?\d*\.\d+E?[-+]?\d*)\s+E1', data, re.MULTILINE)
if match:
final_energy = float(match.group(1))
print('Single energy:', single_energy)
print('Final energy:', final_energy)
```
上述代码中,我们首先使用with open()语句读取OSZICAR文件,并将其保存到一个字符串变量data中。然后,我们使用re.search()方法和正则表达式分别从data中提取单点能和最后优化的能量。在提取单点能时,我们使用正则表达式'^\s*1\s+[-+]?\d*\.\d+E?[-+]?\d*\s+[-+]?\d*\.\d+E?[-+]?\d*\s*$'匹配以1开头的行,并提取第二个数字作为单点能。在提取最后优化的能量时,我们使用正则表达式'^\s*E0=\s+([-+]?\d*\.\d+E?[-+]?\d*)\s+E1'匹配'E0='和'E1'之间的数字,并将其作为最后优化的能量。最后,我们将提取到的单点能和最后优化的能量打印出来。
阅读全文