Python 读取文件“重复”的特定位置
我想在python中读取一个file.txt,然后打印一个特定的位置,我有两个轨道能量,但我只对最后一个感兴趣,特别是对应于2.0000和0.0000的线。此处的输入文件是: --------轨道能量--------Python 读取文件“重复”的特定位置,python,Python,我想在python中读取一个file.txt,然后打印一个特定的位置,我有两个轨道能量,但我只对最后一个感兴趣,特别是对应于2.0000和0.0000的线。此处的输入文件是: --------轨道能量-------- NO OCC E(Eh) E(eV) 0 2.0000 -19.126728 -520.4647 1 2.0000 -1.009435 -27.4681 2
NO OCC E(Eh) E(eV)
0 2.0000 -19.126728 -520.4647
1 2.0000 -1.009435 -27.4681
2 2.0000 -0.538078 -14.6418
3 2.0000 -0.388855 -10.5813
4 2.0000 -0.321100 -8.7376
5 0.0000 -0.008155 -0.2219
6 0.0000 0.044286 1.2051
7 0.0000 0.141342 3.8461
8 0.0000 0.144536 3.9330
9 0.0000 0.153520 4.1775
10 0.0000 0.168115 4.5746
---------------- ORBITAL ENERGIES ----------------
NO OCC E(Eh) E(eV)
0 2.0000 -19.127397 -520.4829
1 2.0000 -1.014381 -27.6027
2 2.0000 -0.530762 -14.4428
3 2.0000 -0.398228 -10.8363
4 2.0000 -0.322062 -8.7638
5 0.0000 -0.007625 -0.2075
6 0.0000 0.044967 1.2236
7 0.0000 0.140524 3.8238
8 0.0000 0.144488 3.9317
9 0.0000 0.157663 4.2902
10 0.0000 0.166347 4.5265
11 0.0000 0.221116 6.0169
我使用了以下代码:
#!/usr/bin/env python
import sys, os
# ------------- GET INPUT FILE ------------- #
if len(sys.argv) <= 1:
name = raw_input("Enter path to input: ")
else:
name = sys.argv[1]
fo = open(name, "r")
lines = fo.readlines()
fo.close()
# ------------------------------------------ #
# Define Variables
omega = 0
o_HOMO = []
o_LUMO = []
# Sort Input Into Lists
for line in lines:
line = line.split() # split lines into lists
if not line: # skip empty lines
continue
if len(line) >= 3:
if line[1] == '2.0000': # gather neutral occupied eigenvalues (if closed shell)
o_HOMO.append(line[3])
elif line[1] == '0.0000': # gather virtual orbitals
o_LUMO.append(line[3])
for idx, item in enumerate(o_HOMO): #HOMO
if idx == len(o_HOMO) - 1:
print(item)
for idx, item in enumerate(o_LUMO): #LUMO
if idx == len(o_LUMO) - 1:
print(item)
我的结果是这样的:
-8.7638
6.0169
但我想要这样的结果:
-8.7638
-0.2075使用Python 3的解决方案:
输出:
-8.7638
-0.2075
Data.txt文件包含:
---------------- ORBITAL ENERGIES ----------------
NO OCC E(Eh) E(eV)
0 2.0000 -19.126728 -520.4647
1 2.0000 -1.009435 -27.4681
2 2.0000 -0.538078 -14.6418
3 2.0000 -0.388855 -10.5813
4 2.0000 -0.321100 -8.7376
5 0.0000 -0.008155 -0.2219
6 0.0000 0.044286 1.2051
7 0.0000 0.141342 3.8461
8 0.0000 0.144536 3.9330
9 0.0000 0.153520 4.1775
10 0.0000 0.168115 4.5746
---------------- ORBITAL ENERGIES ----------------
NO OCC E(Eh) E(eV)
0 2.0000 -19.127397 -520.4829
1 2.0000 -1.014381 -27.6027
2 2.0000 -0.530762 -14.4428
3 2.0000 -0.398228 -10.8363
4 2.0000 -0.322062 -8.7638
5 0.0000 -0.007625 -0.2075
6 0.0000 0.044967 1.2236
7 0.0000 0.140524 3.8238
8 0.0000 0.144488 3.9317
9 0.0000 0.157663 4.2902
10 0.0000 0.166347 4.5265
11 0.0000 0.221116 6.0169
如果您在理解任何部分时遇到问题,请与我们分享。谢谢大家,使用python这意味着什么?我想提取file.txt以提取某些值。*File.txt或result.out=是理论化学计算的结果,使用名为ORCA-8.7638的软件:表示HOMO最高占据分子轨道能量-0.2075:表示LUMO最低未占据分子轨道能量的能量在我的例子中,H2O分子,计算只进行了两次,我一直对这两种能量感兴趣,因为我将在我未来的PYTHON程序中使用它们来计算其他索引谢谢你,亲爱的arsho,我将在我的其他文件my results.out中测试它。然后我给你结果。谢谢你,谢谢你,谢谢你,谢谢你,谢谢你应该注意:人的能量=-8.7638;它对应于轨道能量的最后一块和对应于列OCC=2.0000Lumo=-0.2075的能量的最后一个值;对应于轨道能量的最后一块和对应于OCC=0.0000列的第一个值
---------------- ORBITAL ENERGIES ----------------
NO OCC E(Eh) E(eV)
0 2.0000 -19.126728 -520.4647
1 2.0000 -1.009435 -27.4681
2 2.0000 -0.538078 -14.6418
3 2.0000 -0.388855 -10.5813
4 2.0000 -0.321100 -8.7376
5 0.0000 -0.008155 -0.2219
6 0.0000 0.044286 1.2051
7 0.0000 0.141342 3.8461
8 0.0000 0.144536 3.9330
9 0.0000 0.153520 4.1775
10 0.0000 0.168115 4.5746
---------------- ORBITAL ENERGIES ----------------
NO OCC E(Eh) E(eV)
0 2.0000 -19.127397 -520.4829
1 2.0000 -1.014381 -27.6027
2 2.0000 -0.530762 -14.4428
3 2.0000 -0.398228 -10.8363
4 2.0000 -0.322062 -8.7638
5 0.0000 -0.007625 -0.2075
6 0.0000 0.044967 1.2236
7 0.0000 0.140524 3.8238
8 0.0000 0.144488 3.9317
9 0.0000 0.157663 4.2902
10 0.0000 0.166347 4.5265
11 0.0000 0.221116 6.0169