我有一个循环如下:
for line in FILE:
if ('MyExpression' in line)
# Pull the first number out of this line and put it in a list
# Pull the first number out of the NEXT line that has either 'MyExpression' or 'MyExpression2', and put it in a list
基本上,我想在'My Expression exists'
找到一行,并从该行中抽出一个数字,表示试验的开始。然后我想跳转到包含MyExpression
或MyExpression2
的下一行,并从该行中提取一个数字,这是我的试验的偏移量。我想浏览整个文件,所以我有两个列表,一个表示开始,一个表示偏移。
我知道如何在Matlab中做到这一点,但在Python中,我不知道如何告诉它在下一行中查看。喜欢if(' MyExpresion' in line + 1)OR(' MyExpression2' in line + 1)?
更新:对于迟到的回复感到抱歉,但这就是我的文件的样子:
1234 MyExpression Blah Blah
3452 Irrelevant Blah Blah
4675 MyExpression2 Blah Blah
5234 MyExpression Blah Blah
6666 MyExpression Blah Blah
我想要两个数组/列表:[1234,5234]和[4675,6666]基本上,它们对应于开始和偏移。我将使用当前的答案,看看他们是否有人这样做,谢谢!
答案 0 :(得分:4)
文件对象为iterators,这意味着您可以使用next
推进它们:
for line in FILE:
if ('MyExpression' in line):
next_line = next(FILE, None)
请注意,如果到达文件末尾,则None
会返回默认值。没有它,将引发StopIteration
例外。
答案 1 :(得分:4)
在for line in afile:
循环的正文中,下一行尚未阅读;但是,您可以继续读取所述循环体内的以下行。 E.g:
for line in afile:
if 'MyExpression' in line:
# ...the number extraction, e.g with a regular expression, then:
for nextline in afile:
if 'MyExpression' in nextline or 'MyExpression2' in nextline:
# the other number extraction, then
break # done with the inner loop
请注意consumes
afile
中itertools.tee
部分(或全部)内容的afile
。如果您需要再次遍历该部分,则需要使用a.txt
制作两个"克隆" 1234 MyExpression Blah Blah
3452 Irrelevant Blah Blah
4675 MyExpression2 Blah Blah
5234 MyExpression Blah Blah
6666 MyExpression Blah Blah
迭代器的循环,以及"克隆"代替。但是,根据我对你的问题的理解,这对你的具体要求来说并不是必需的(而且它有点棘手,所以我不会对此进行阐述)。
例如,如果with open('a.txt') as afile:
results = []
for line in afile:
if 'MyExpression' in line:
first = int(line.split()[0])
for nextline in afile:
if 'MyExpression' in nextline or 'MyExpression2' in nextline:
second = int(nextline.split()[0])
results.append([first, second])
break # done with the inner loop
print(results)
是您提供的示例文件:
[[1234, 4675], [5234, 6666]]
然后这个示例代码:
[1234, 5234] and [4675, 6666]
发射
4675
不知道你想象的算法是什么,而是
{{1}}
什么逻辑规范会使{{1}}被忽略为第一对但重新考虑为开始第二对?当然,我在Q的文本中没有看到任何内容,因此,请编辑该文本以使您的规格符合您的实际意图!
答案 2 :(得分:0)
希望这有助于...寻找“表情”,并成对打印线条。
text = "Expression"
# Get lines with text in it
with open('test.log') as log_file:
the_lines = [line.strip() for line in log_file if text in line]
# Make pairs (0,1), (2,3), etc.
duples = [(the_lines[2*i], the_lines[2*i+1]) for i in xrange(len(the_lines)/2)]
# Show me...
for pair in duples:
print pair
您应该将line.strip()替换为您自己的函数,以获取您要查找的数字。
注意:我不喜欢在创建双工时使用索引,但它比使用迭代器更简单。