2016-10-06 99 views
1

我正在导入一个txt文件到Python 3中,我能够成功地打印我用作标识符的项目/行,但是我在打印以下并保留该值。在文本文件中搜索值然后打印下一行

我使用'Anchor'来查找后续的订单项。每个'Anchor'之间的行数有所不同,这意味着有时会在'Anchor'之间出现垃圾/噪音,但距岸边的深度和距离始终与Anchor相同。我试图加1行,因为如果功能让我知道这是一个'Anchor'值,但是我得到如下:

TypeError: Can't convert 'int' object to str implicitly 

该文件类似于:

asfasdfasdf 
Anchor 
The depth is 30 Feet 
5 miles from shore 

asdfasdsf 
Anchor 
The depth is 24 feet 
8 miles from shore 
Anchor 
The depth is 21 feet 
4 km from shore 

与尝试下面的代码:

f = open('test.txt', 'r', encoding='utf8') 

for line in f.readlines(): 
    if 'Anchor' in line: 
     print(line+1) 

f.close() 

回答

0

您可以引入代表最后一行的状态的变量,就像这样:

previous_line_was_anchor = False 
for line in f.readlines(): 
    if 'Anchor' in line: 
     previous_line_was_anchor = True 
    else: 
     if previous_line_was_anchor: 
      print line 
     previous_line_was_anchor = False 
+0

感谢您使用此解决方案,了解如何在“锚点”之后打印更多订单项的任何想法? –

+0

这不是你原来的问题的一部分。你应该接受现在的答案。 –

0

我强烈推荐使用python iterators

它看起来像你的问题会更适合自定义重复,而不是使用for .. in ..循环:

lines = iter(f.readlines()) 

while True: 
    try: 
     if next(lines) == 'Anchor': 
      print(next(lines)) 
    except StopIteration: 
     break 

如果需要打印更多的行之后“锚”只需添加更多print(next(lines))电话。

相关问题