擅长:python、mysql、java
<p><a href="http://docs.python.org/library/itertools.html#itertools.groupby" rel="nofollow">itertools.groupby</a>提供了一种将行收集到组中的简单方法:</p>
<pre><code>import itertools
data=[]
with open('data.txt','r') as f:
for key,group in itertools.groupby(f,lambda line: line.startswith('#meta')):
if key:
meta=next(group).strip()
else:
lines=''.join(group).strip()
data.append((meta,lines))
print(data)
</code></pre>
<p>收益率</p>
^{pr2}$
<hr/>
<p>表达式</p>
<pre><code>itertools.groupby(f,lambda line: line.startswith('#meta'))
</code></pre>
<p>返回迭代器。它循环遍历<code>f</code>中的行,并在每一行上调用<code>lambda</code>函数。当遇到以<code>#meta</code>开头的行时,该函数返回<code>True</code>,否则返回{<cd5>}。在</p>
<p><code>itertools.groupby</code>收集返回相同值的所有连续行。在</p>
<p>因此,以<code>#meta</code>开头的行放在它自己的组中,然后所有不以<code>#meta</code>开头的行放在下一个组中,依此类推。在</p>
<p><code>key</code>是<code>lambda</code>函数的返回值。在本例中,它将是<code>True</code>或{<cd5>}。在</p>