擅长:python、mysql、java
<p>您可以按照Snakes和Coffee的建议执行,只需使用yield语句将该函数(或其代码)包装在一个循环中。这将创建一个生成器,可以迭代调用它来动态创建下一行的指令。假设您要将这些内容写入csv,例如,使用Snakes的parse_to_dict:</p>
<pre><code>import re
import csv
writer = csv.DictWriter(open(outfile, "wb"), fieldnames=["id", "name", "address", "phone"])
# or whatever
</code></pre>
<p>可以将生成器创建为函数或具有内联理解:</p>
<pre><code>def dict_generator(lines):
for line in lines:
yield parse_to_dict(line)
</code></pre>
<p>--或--</p>
<pre><code>dict_generator = (parse_to_dict(line) for line in lines)
</code></pre>
<p>这些都差不多。此时,您可以通过调用<code>dict_generator.next()</code>来获得一个dict解析行,并且您将神奇地一次获得一个-不涉及额外的RAM抖动。</p>
<p>如果你有16吉格的原始数据,你可以考虑做一个发电机,把线拉进去。它们真的很有用。</p>
<p>有关SO和一些文档中生成器的更多信息:
<a href="https://stackoverflow.com/questions/102535/what-can-you-use-python-generator-functions-for">What can you use Python generator functions for?</a>
<a href="http://wiki.python.org/moin/Generators" rel="nofollow noreferrer">http://wiki.python.org/moin/Generators</a></p>