Python 读取文件“重复”的特定位置

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

我想在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   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