擅长:python、mysql、java
<p><code>.readlines()</code>一次性读取<strong>文件中的所有数据</strong>。第一次通话后没有更多的行要读了。在</p>
<p>您可能想使用<code>.readline()</code>(no<code>s</code>,单数)来代替:</p>
<pre><code>with open('test.txt','r') as fin:
for _ in range(5): fin.readline()
rest = "\n".join(fin.readlines())
</code></pre>
<p>请注意,因为<code>.readlines()</code>已经返回了一个列表,所以不需要遍历这些项。您也可以使用<code>.read()</code>读取文件的其余部分:</p>
^{2}$
<p>或者,将file对象视为iterable,并使用<a href="http://docs.python.org/2/library/itertools.html#itertools.islice" rel="nofollow">^{<cd6>}</a>切片iterable来跳过前五行:</p>
<pre><code>from itertools import islice
with open('test.txt','r') as fin:
all_but_the_first_five = list(islice(fin, 5, None))
</code></pre>
<p>这确实会产生<em>行</em>,而不是一个大字符串,但是如果要逐行处理输入文件,那么通常最好还是这样。可以直接在切片和句柄行上循环:</p>
<pre><code>with open('test.txt','r') as fin:
for line in list(islice(fin, 5, None)):
# process line, first 5 will have been skipped
</code></pre>
<p>不要混合使用file对象作为iterable和<code>.readline()</code>;由file对象实现的迭代协议使用一个内部缓冲区来确保<code>.readline()</code>所不知道的效率;在迭代之后使用<code>.readline()</code>很可能会在文件中返回比预期更远的数据。在</p>