<p>最简单的方法:</p>
<pre><code>with open('thefile.txt') as f:
thelist = f.readlines()
</code></pre>
<p>68000行意味着几兆字节的距离,这在某些评论中是一种恐怖!-),在任何现代平台上,可用的虚拟内存都是<strong>giga</strong>字节(如果你在Commodore64上运行Python,那就不同了,但我相信你还有很多其他的问题:-). 在</p>
<p><code>readlines</code>方法在内部完成了其他方法需要显式执行的换行剥离,因此更可取(而且更快)。如果你需要一个单词列表的结果,无论如何,你也不可能通过零碎的方法来保存任何内存。在</p>
<p>补充道:例如,在我的Macbook Air上</p>
^{pr2}$
<p>所以超过了OP提到的三分之一。在这里</p>
<pre><code>>>> with open('/usr/share/dict/words') as f: wds=f.readlines()
...
>>> sys.getsizeof(wds)
2115960
</code></pre>
<p>所以,有点超过2MB的200k字检查!因此,对于超过60万个单词,我推断出“一点超过6MB”<strong>远远地</strong>低于这个“勇敢的新世界”中可能导致<code>MemoryError</code>的数量(来自像我这样的老一辈人的观点:-)拥有许多千兆字节的机器(甚至<strong>手机</strong>,现在……:-)。在</p>
<p>另外,不管怎样,如果这个单词列表被保存为一个单词列表,你不可能花费少于这几兆字节的内存!逐行读取文件,并巧妙地从需要的行子集中保留所需数据的子集,这是“完全错误的努力”,而您的目标实际上是在特定情况下保留每一行中的几乎所有文本(这正好符合Q的要求!)!-),只需使用<code>readlines</code>并完成它!-)在</p>
<p>补充道:对Q的编辑使问题变得清晰(尽管问题中没有说明!)这些行必须在单词的右边包含一些空格,所以需要一个<code>rstrip</code>。即便如此,公认的答案也不是最优的。考虑以下文件<code>i.py</code>:</p>
<pre><code>def slow():
list_of_words = []
for line in open('/usr/share/dict/words'):
line = line.rstrip()
list_of_words.append(line)
return list_of_words
def fast():
with open('/usr/share/dict/words') as f:
wds = [s.rstrip() for s in f]
return wds
assert slow() == fast()
</code></pre>
<p>其中<code>assert</code>最后只验证了两种方法产生相同结果的事实。现在,在Macbook Air上…:</p>
<pre><code>$ python -mtimeit -s'import i' 'i.slow()'
10 loops, best of 3: 69.6 msec per loop
$ python -mtimeit -s'import i' 'i.fast()'
10 loops, best of 3: 50.2 msec per loop
</code></pre>
<p>我们可以看到,接受答案中的循环方法比列表理解要多花费40%的时间。在</p>