擅长:python、mysql、java
<p>如果我正确理解了您要做的事情,那么两个版本的代码都是错误的。就像@Leon在第二个版本中说的,你在<code>ProcessLine(line)</code>之后缺少了<code>line = ""</code>,而在第一个版本中,只有第一行是正确的,如果行比buffer短,你只在<code>line += buffer[:i]</code>中使用了buffer的第一部分,但是问题出在这一行<code>line = buffer[i+1:]</code>,所以如果你的<code>line</code>有1000个字符长,而且<code>buffer</code>是10000个字符长,那么当您使用<code>line += buffer[:i]</code>时,您的行将是9000个字符长,可能包含多行。从阅读:</p>
<p>这样做相当有效,但是,可能会发生这样的情况,即一行比缓冲区短,这会导致我跳过一行</p>
<p>我想你已经意识到了这一点,但我之所以要写得详细,是因为这也是为什么你的第一个版本工作得更快的原因。你知道吗</p>
<p>在解释了这一点之后,我认为最好的方法是读取孔文件,然后拆分文本以获得行,因此您的代码如下所示:</p>
<pre><code>f = open('textfile.txt', "rt")
buffer = f.read()
f.close()
l = buffer.split('#')
</code></pre>
<p>然后你就可以用这样的方法:</p>
<pre><code>for line in l:
ProcessLine(line)
</code></pre>
<p>要得到list<code>l</code>,我只用了不到2秒钟的时间。你知道吗</p>
<p>PS:用记事本打开大文件(比如250MB)应该不会有问题,我甚至打开了500MB的文件。你知道吗</p>