<p>还有一些不太像python的东西,尽管它们更适合代码评审。<br/>
既然评论太长了,我就把它当作一个答案。在</p>
<p>小结:</p>
<ul>
<li><p>使用<code>with</code>上下文管理器。这样就省去了<code>try ... finally</code>的麻烦,确保文件在之后关闭。</p></li>
<li><p>不要使用<code>file</code>作为变量名:这是一个保留的类名(对于文件对象,同样如此)</p></li>
<li><p>不要使用全局变量:只需将文件名传递给<code>regex()</code>函数</p></li>
<li><p>迭代file对象。这样就节省了对<code>readlines()</code>的调用,然后迭代这些行。迭代一个文件可以一次性完成相同的事情。在</p>
<p>这个迭代也可以节省内存,因为它不会一次性读取完整的文件,而是一行一行地读取。有关详细信息,请参见示例<a href="http://stupidpythonideas.blogspot.com/2013/06/readlines-considered-silly.html" rel="nofollow">this post</a>。</p></li>
<li><p>简单的单词搜索不需要正则表达式。一般来说,首先尝试避免使用regex,然后看看还有什么其他选项(有很多有用的方法可以<code>str</code>)。在</p>
<p>关于regex的通常说法是</p>
<blockquote>
<blockquote>
<blockquote>
<p>I have a problem. I'll try a regular expression.</p>
<p>...</p>
<p>Now I have two problems</p>
</blockquote>
</blockquote>
</blockquote>
<p>(<a href="http://blog.codinghorror.com/regular-expressions-now-you-have-two-problems/" rel="nofollow">here's one post on this topic</a>。)</p>
<p>在这种情况下,一个简单的<code>if word in sentence</code>表单就可以做到这一点。</p></li>
</ul>
<p>这可能会给出以下代码:</p>
<pre><code>#!/usr/bin/env python
import sys
def run(filename):
with open(filename) as infile: # "r" mode is default
for line in lines:
if 'BreakingBad' in line:
print line.rstrip('\n') + "," + 'BreakingBad'
run("/home/test")
</code></pre>
<p>请注意,我显式地<code>rstrip</code>只对换行符执行ping操作:如果只使用<code>rstrip()</code>,它将从右侧删除任何空白字符,包括空格和制表符。这也许是有意为之,但从问题上看还不清楚。在</p>
<p>进一步:由于您打开了一个文件进行写入(但不要使用它,也就是说,它对您的问题不是必需的):您可以在<code>with</code>语句中组合文件:</p>
^{pr2}$