<p>给出:</p>
<pre><code>$ cat file.csv
line 1
line 2
line 3
line X
line 5
line 6
line 7
</code></pre>
<p>您可以使用<a href="https://docs.python.org/2/library/itertools.html#itertools.dropwhile" rel="nofollow noreferrer">itertools dropwhile</a>:</p>
<pre><code>import itertools as it
with open(file_path,'rU') as fp:
a=[line.strip() for line in it.dropwhile(lambda l: 'X' not in l, fp)]
</code></pre>
<p>结果:</p>
<pre><code>>>> a
['line X', 'line 5', 'line 6', 'line 7']
</code></pre>
<p>如果您想在整个文件上使用<code>enumerate</code>,您可以有一个对象在测试后保持<code>True</code>或<code>False</code>状态。通常称为触发器,用于查找文件中的标记,而只逐行读取文件:</p>
<pre><code>class FlipFlop:
def __init__(self, start_state, func):
self.call=func
self.state = start_state
def __call__(self, st):
if self.call(st): self.state=not self.state
return self.state
with open(fn) as f_in:
ff=FlipFlop(False, lambda s: 'X' in s)
x_and_after=[(i, line.strip()) for i, line in enumerate(f_in) if ff(line)]
</code></pre>
<p>结果:</p>
<pre><code>>>> x_and_after
[(3, 'line X'), (4, 'line 5'), (5, 'line 6'), (6, 'line 7')]
</code></pre>