<p><a href="https://docs.python.org/3/library/itertools.html?highlight=groupby#itertools.groupby" rel="nofollow noreferrer">^{<cd1>}</a>可以帮助:</p>
<pre><code>from io import StringIO
from itertools import groupby
text = '''# abcdefgh
1fnrnf
mrkfr
nfoiernfr
nerfnr
# something
njndjen kj
ejkndjke
#vcrvr'''
with StringIO(text) as file:
lines = (line.strip() for line in file) # removing trailing '\n'
for key, group in groupby(lines, key=lambda x: x[0]=='#'):
if key is True:
# found a line that starts with '#'
print('found header: {}'.format(next(group)))
if key is False:
# group now contanins all lines that do not start with '#'
print('\n'.join(group))
</code></pre>
<p>请注意,所有这些都是<em>懒惰</em>。你的内存中只有两个标题之间的所有项目。在</p>
<p>您必须将<code>with StringIO(text) as file:</code>替换为;<code>with open('test234.txt', 'r') as file:</code>。。。在</p>
<p>测试的输出是:</p>
^{pr2}$
<hr/>
<p><strong>更新</strong>因为我误解了。这是一个新的尝试:</p>
<pre><code>from io import StringIO
from collections import deque
from itertools import takewhile
from_line = '# abcdefgh'
to_line = '# something'
with StringIO(text) as file:
lines = (line.strip() for line in file) # removing trailing '\n'
# fast-forward up to from_line
deque(takewhile(lambda x: x != from_line, lines), maxlen=0)
for line in takewhile(lambda x: x != to_line, lines):
print(line)
</code></pre>
<p>在这里,我使用<a href="https://docs.python.org/3/library/itertools.html?highlight=takewhile#itertools.takewhile" rel="nofollow noreferrer">^{<cd4>}</a>在行上获取迭代器,直到遇到一个continment(直到在您的例子中找到第一个头)。在</p>
<p><code>deque</code>部分只是itertools食谱中建议的<a href="https://docs.python.org/3/library/itertools.html?highlight=consume#itertools-recipes" rel="nofollow noreferrer">^{<cd6>} pattern</a>。它只是快速前进到给定条件不再成立的点。在</p>