2015-10-12 206 views
0

我试图例如输入匹配如何打印下一行蟒蛇

后打印下一个3行是:

Testing 
Result 
test1 : 12345 
test2 : 23453 
test3 : 2345454 

,所以我试图寻找“结果”字符串文件和打印下一从中3行:

输出将是: -

test1 : 12345 
test2 : 23453 
test3 : 2345454 

我的代码是:

with open(filename, 'r+') as f: 
    for line in f: 
     print line 
     if "Benchmark Results" in f: 
      print f 
      print next(f) 

其唯一给我的输出:

testing 

如何让我的期望输出,帮助请

+0

线 如果“测试结果” f中 似乎无法捕捉到您所需的条件。我想你想要的东西更像 如果“结果”行 而不是。 – Hypaethral

+0

@GrumbleSnatch“基准测试结果”的测试是错误的,因为它正在针对“f”而不是“线”进行测试。 – RobertB

+0

@ Shield-pro:在格式化输入和输出时,我删除了空白行。请重新添加它们,如果它们真的是您的输入/输出的一部分 –

回答

0

它正在等待为先“的结果“然后打印其余的输入:

import re, sys 

bool = False 
with open("input.txt", 'r+') as f: 
    for line in f: 
     if bool == True: 
      sys.stdout.write(line) 
     if re.search("Result",line): #if it should match whole line, than it is also possible if "Result\n" == line: 
      bool = True 

如果你想后前3个打印结束,您可以添加变量cnt = 0和(这种方式,例如)改变这部分代码:

 if bool == True: 
      sys.stdout.write(line) 
      cnt = cnt+1 
      if cnt == 3: 
       break 
+0

他只是想打印下三行。所以这个逻辑并不完全符合他的要求。另外,我认为正则表达式对此是过度的。 – RobertB

1

您正在测试(印刷)“F”,而不是“线” 。小心一点。 'f'是文件指针,行有你的数据。

with open(filename, 'r+') as f: 
     line = f.readline() 
     while(line): 
      if "Benchmark Results" in line: 
       # Current line matches, print next 3 lines 
       print(f.readline(),end="") 
       print(f.readline(),end="") 
       print(f.readline(),end="") 
      line = f.readline() 
+1

请注意,'.readline()'会保留'\ n'字符,'print'会附加一个换行符,这将使输出在行之间有空行(注意后面标记为3.x--所以print应该是这里的一个函数)。 –

+0

@JonClements。固定。我正在脱离显示2.x打印语句的代码,没有看标签。 – RobertB

+2

'f.readlines()'将消耗整个文件,之后调用'f.readline()'将返回空字符串。 – mata

2

首先,你需要检查该文本是在line(不在FileObj文件f),并且可以利用islicef采取下一个3线,并打印出来,如:

from itertools import islice 

with open(filename) as f: 
    for line in f: 
     if 'Result' in line: 
      print(''.join(islice(f, 3))) 

循环将从三行打印后的行中继续。如果你不想要的话 - 在if内部输入break

+0

这很聪明。我不得不承认我从不使用'islice',我可能应该这么做。现在我已经看到了这一点,我绝对喜欢它比我的答案更好:) – RobertB

0
with open('data', 'r') as f: 
    lines = [ line.strip() for line in f] 
    # get "Result" index 
    ind = lines.index("Result") 
    # get slice, add 4 since upper bound is non inclusive 
    li = lines[ind:ind+4] 
    print(li) 
    ['Result', 'test1 : 12345', 'test2 : 23453', 'test3 : 2345454'] 

or as exercise with regex: 

import re 
with open('data', 'r') as f: 

    text = f.read() 
    # regex assumes that data as shown, ie, no blank lines between 'Result' 
    # and the last needed line. 
    mo = re.search(r'Result(.*?\n){4}', text, re.MULTILINE|re.DOTALL) 

    print(mo.group(0)) 

Result 

test1 : 12345 

test2 : 23453 

test3 : 2345454 
0

我建议打开文件和劈裂其行内容,分配的结果给一个变量,所以你可以操纵更舒适的数据:

file = open("test.txt").read().splitlines() 

然后,你可以检查哪些行包含字符串“结果”,并打印三个下列行:

for index, line in enumerate(file): 
    if "Result" in line: 
     print(file[index+1:index+4])