<p>我是这样写的:</p>
<pre><code>from ast import literal_eval
from itertools import tee
def pairwise(iterable): # from itertools recipes
a, b = tee(iterable)
next(b, None)
return zip(a, b)
with open("a.txt") as f:
for p0, p1 in pairwise(map(literal_eval, f)):
if p0[1] == 'B' and p1[1] == 'I':
print(' '.join(p0[0], p1[0]))
break
</code></pre>
<hr/>
<p>原因如下:</p>
<p>您的文件由两个字符串组成的<code>repr</code>s组成。这是一个非常糟糕的格式,如果你可以改变你存储数据的方式,你应该这样做。但是如果太晚了,您必须解析它,<a href="https://docs.python.org/3/library/ast.html#ast.literal_eval" rel="nofollow">^{<cd2>}</a>是最好的答案。在</p>
<p>因此,我们通过<code>map</code>ping <code>literal_eval</code>将文件中的每一行转换为一个元组。在</p>
<p>然后我们使用<a href="https://docs.python.org/3/library/itertools.html#itertools-recipes" rel="nofollow">^{<cd6>} recipes</a>中的<code>pairwise</code>将元组的iterable转换为相邻元组对的iterable。在</p>
<p>所以,现在,在循环中,<code>p0</code>和{<cd8>}将是相邻行中的元组,您只需编写您所描述的内容:如果<code>p0[1]</code>是<code>'B'</code>,后面跟着(也就是说,<code>p1[1]</code>是)<code>'I'</code>,<code>join</code>这两个{<cd14>}s</p>
<p>我不知道你想怎么处理连接的字符串,所以我只是把它打印出来了。我也不确定是要处理多个值还是只处理第一个值,所以我放入了一个<code>break</code>。在</p>