<p>我将在这里使用with语句,如果使用的是旧版本的python,则需要导入该语句:</p>
<pre><code>from __future__ import with_statement
</code></pre>
<p>对于实际的代码,如果您可以将整个文件加载到内存中两次(即,它非常小),我会这样做:</p>
^{pr2}$
<p>这样你就跳过了最后一行,因为没有太多的开销,以至于没有在末尾包含没有孩子的叶子,这就是你想要的吗在</p>
<p>有点切题:如果文件真的很大,您可能不想将整个文件加载到内存中,在这种情况下,您可能需要一个生成器。在这种情况下,如果你不需要打印的话,我需要的是如何简化文件的打印:</p>
<pre><code>class reader_and_split():
def __init__(self, fname, delim='\t'):
self.fname = fname
self.delim = delim
def __enter__(self):
self.file = open(self.fname, 'r')
return self.word_generator()
def __exit__(self, type, value, traceback):
self.file.close()
def word_generator(self):
current = []
while True:
char = self.file.read(1)
if char == self.delim:
yield ''.join(current)
current = []
elif not char:
break
else:
current.append(char)
</code></pre>
<p>生成器的价值在于,在对其运行拆分之前,不需要将文件的全部内容加载到内存中,这对于非常非常大的文件来说可能很昂贵。为了简单起见,此实现只允许使用单字符分隔符。也就是说,要解析出所有内容,只需使用生成器,一种快速的肮脏方法是:</p>
<pre><code>with reader_and_split(fileloc) as f:
previous = f.next()
for word in f:
print "%s \t %s" % (previous, word)
previous = word
</code></pre>