如何在特定单词上方打印行?

时间:2016-05-03 19:08:56

标签: python ubuntu

基本上我有一个如下文本文件:

- Brandon = 1
- Mark = 70
- Charlie = 2
- Mark = 65
- Jon = 3
- Mark = 73
- May = 4
- Mark = 88
- Nathan = 5
- Mark = 95
- etc..

现在我想要一个程序来读取文本文件的所有行,(我知道该怎么做)并检查标记的值,如果它高于70,它将打印标记以及上面的行它(这是学生姓名的行)。有谁知道这是怎么做的,因为我没有线索。谢谢你的帮助!

此致 乔

2 个答案:

答案 0 :(得分:0)

这是一种方法,虽然我不打算解释它是如何工作的。您需要了解regexlist comprehensionsenumerate内置方法等。

import re

with open('myfile.txt', 'r') as f:
    lines = f.readlines()
    lines = [l.strip() for l in lines] # list comprehension
    for index, line in enumerate(lines):
        mark = re.search(r'\d+',line) # regex
        if int(mark.group()) > 70:
            print ('Mark: ', mark.group())
            print ('Line above:', lines[index-1])

注意:您需要删除文本文件中包含" - etc ..."的最后一行。这个代码工作。此外,文本文件中的每一行都必须有一个标记(分数)。而且没有空行:) 你应该改变txt文件,第一行的标记是> 70,然后上面的'线实际上是文件中的最后一行 - 至少在这段代码中。

答案 1 :(得分:0)

看看这里,看看你是否能理解这段代码的作用。评论很好。

#opening a file
path_to_file = '/usr/home/file.txt'

#reading file
#saving lines to a list
with open(path_to_file, "r") as f:
    l1.readllines(f)

#produced list
l1 = ['- Brandon = 1', '- Mark = 70', '- Charlie = 2', '- Mark = 65', '- Jon = 3',
      '- Mark = 73', '- May = 4', '- Mark = 88', '- Nathan = 5', '- Mark = 95']


#counter to check and get the previous line  
counter = 0

#iterate over list    
for i in l1:

    #define what score is, and save it as int
    score = int(i.split("=")[1])

    #conditional check
    if score > 70:
        #if condition is true, then print previous line
        print l1[counter-1]

    #autoincrement
    counter += 1

制作输出:

- Jon = 3
- May = 4
- Nathan = 5

如果您将print l1[counter-1]更改为print l1[counter] print i,您将获得以下输出:

- Mark = 73
- Mark = 88
- Mark = 95

如@taesu所述,你应该搜索如下句子:

  • 如何在python中打开文件
  • 如何在python中读取文件
  • 如何在python中循环
  • 如何在python中打印

因为这是您的任务所需的工作流程。

  • 打开文件
  • 读取行
  • 对于每一行,检查条件是否为真
  • 如果条件为真,那么
  • 做点什么

简单如py。