<p>一种可能的方法是使用<a href="http://docs.python.org/2/library/collections.html#collections.deque" rel="nofollow">deque</a>,这样您可以一次跟踪三行:</p>
<pre><code>import collections
parsed_output = open("name-of-file-to-be-written", "w")
filtered_input = open("name-of-file-that-has-above-data", "r")
window = collections.deque([None]*3, maxlen=3)
for line in filtered_input:
window.append(line)
if 'silence.wav' in window[0]:
parsed_output.write(window[0])
# only output next two lines if they don't also contain 'silence.wav'
if 'silence.wav' not in window[1]:
parsed_output.write(window[1])
if 'silence.wav' not in window[2]:
parsed_output.write(window[2])
# following if/elif in case last or second to last line contain 'silence.wav'
if 'silence.wav' in window[1]:
parsed_output.write(window[1])
parsed_output.write(window[2])
elif 'silence.wav' in window[2]:
parsed_output.write(window[2])
parsed_output.close()
</code></pre>
<p>如果您向deque提供<code>maxlen</code>参数,那么当您向一端添加其他元素时,另一端会弹出一个元素,例如:</p>
<pre><code>>>> x = collections.deque([1, 2, 3], maxlen=3)
>>> x
deque([1, 2, 3], maxlen=3)
>>> x.append(4)
>>> x
deque([2, 3, 4], maxlen=3)
>>> x.append(5)
>>> x
deque([3, 4, 5], maxlen=3)
</code></pre>
<p>这允许您迭代文件,但以方便的方式保存读取的最后3行,<code>window</code>的第一个元素与您的条件匹配时,只需输出匹配的行和以下两行,只要它们与您的条件不匹配即可。你知道吗</p>