如何使用python读取特定行并在此行中打印特定位置

时间:2017-11-13 04:42:08

标签: python

如何从文本文件中读取特定行,其中包含多行具有相同字符“!”的行。我的目标是找到最后一行并打印位置编号四“[4]”。

我的file.txt:

     1.0000   1.0000   1.0000   1.0000   1.0000   1.0000   1.0000   1.0000
     1.0000   1.0000   1.0000   1.0000   1.0000   1.0000   1.0000   1.0000
     1.0000   1.0000   1.0002   0.9879   0.8682   0.6437  -0.0000  -0.0000
.
.
.
.
!    T   E              =    -122.1058
.
.
.
!    T   E              =    -123.1050
.
.
.
!    T   E              =    -125.10584323 

我的脚本(不工作):

import sys, os
import datetime
import time as t

oTE_list = []
oTE = []

with open("file.txt","r") as f:
    text = f.readlines()
for line in text:
  if line[0] == '!':
    oTE_list.append(line[4])


# Change Lists To Number Format
for item in oTE_list:
  oTE.append(float(item))


for idx, item in enumerate(oTE_list):        
    if idx == len(oTE_list) - 1:
        print(item)
number5 = (item)

另一方面,我用bash管理:

grep ! file.txt | awk 'END{print $5}'

结果应该是这样的: -125.10584323

感谢。

3 个答案:

答案 0 :(得分:3)

这很简单,我不知道你为什么要把它复杂化。

f = open("file.txt", "r")
lines = [line for line in f.readlines() if line[0]=="!"]
number = float(lines[-1].split()[4])

说明:
f.readlines()读取所有行并创建行列表 lines是以!开头的行列表 lines[-1]选择列表中的最后一行 lines[-1].split()会在最后一行列出单词。 (分为" "(空格))
lines[-1].split()[4]会从单词列表中选择第5个单词 float(lines[-1].split()[4])会将该字词转换为浮动。

答案 1 :(得分:1)

我认为你在这里寻找的是how to cut and slice your string。我已经调整了你上面提供的代码来包含这个字符串切片。查看第一个for循环: - )

def main():
    oTE_list = []
    oTE = []

    with open("file.txt","r") as f:
        text = f.readlines()
    for line in text:
        if line[0] == '!':
            equals_index = line.index('=')
            # Get everything after the equal and remove extra whitespace
            after_equal = line[equals_index+1:].strip()
            oTE_list.append(after_equal)

    # Change Lists To Number Format
    for item in oTE_list:
        oTE.append(float(item))

    for idx, item in enumerate(oTE_list):
        if idx == len(oTE_list) - 1:
            print(item)


if __name__ == '__main__':
    main()

运行这个我得到结果:

C:\Python35\python.exe C:/Users/Frito/GitSource/help/sample.py
-125.10584323

现在你可能想知道这是如何运作的。您的输入有点困难,因为我知道删除!TE=之间的所有空格并不是很好的方法和<number>字段。在这种情况下,通过查看您的数据,我选择找到等号,然后查看其后的数据。行equals_index = line.index('=')找到字符串中等号所在的位置。这个“位置”包括空格。通过查看字符串的位置24可以看出这一点。例如print(line[24])

现在我们可以计算等号所在的位置,然后我们就可以得到等号后的所有内容。在您的示例中,这是您希望使用一些额外空格打印到屏幕上的数字。如果要使用print命令直接打印字符串“abc”,它将在abc之前和之后打印三个空格。 python中的.strip()函数删除了那些额外的空格。

当我们将上述两种方法结合起来时,我们可以找到您的号码并打印该号码。我希望这有帮助!

答案 2 :(得分:1)

This is even more simple considering its the line what you want to print

#!/usr/bin/python
#import re
with open("file1.txt") as f:
  lines = f.readlines()[-1]
  lastline = lines.split()[-1]
  print lastline

Desired ouput from the run..

bash-4.1$ ./file1.py
-125.10584323

In case you want all lines which are starting with "!" positionining into the last index value then you can use below ....

#!/usr/bin/python
import re
with open("file1.txt") as f:
  lines = f.readlines()
  for line in lines:
    if "!" in line:
      line = line.split()[-1]
      print line

Output value will be beow ..

bash-4.1$ ./file1_dup.py
-122.1058
-123.1050
-125.10584323