基本上我有一个如下文本文件:
- Brandon = 1
- Mark = 70
- Charlie = 2
- Mark = 65
- Jon = 3
- Mark = 73
- May = 4
- Mark = 88
- Nathan = 5
- Mark = 95
- etc..
现在我想要一个程序来读取文本文件的所有行,(我知道该怎么做)并检查标记的值,如果它高于70,它将打印标记以及上面的行它(这是学生姓名的行)。有谁知道这是怎么做的,因为我没有线索。谢谢你的帮助!
此致 乔
答案 0 :(得分:0)
这是一种方法,虽然我不打算解释它是如何工作的。您需要了解regex
,list comprehensions
,enumerate
内置方法等。
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所述,你应该搜索如下句子:
因为这是您的任务所需的工作流程。
简单如py。