Python中简单的`readlines`操作的索引超出范围

时间:2015-02-17 06:54:08

标签: python python-2.7

基本上我正在尝试阅读最后几行。我感到困惑的是导致这个错误的原因:

nrows = 10
with open(filename, "r") as f:
    for ii in xrange(-nrows, 0, 1):
        last_line = f.readlines()[ii].strip().split(",")

当我在IDE中尝试它时,当我使用纯数字时没有问题,例如:

with open(filename, "r") as f:
    last_line = f.readlines()[-10].strip().split(",")

不知何故看起来xrange生成的索引无法“使用”。有办法解决这个问题吗?

非常感谢您的关注和时间!

1 个答案:

答案 0 :(得分:2)

它在你的第二个例子中起作用的原因是因为你只调用了readlines()一次。

你只能读取一次文件,所以一旦你读完所有行,文件迭代器指向EOF并返回空列表,这将使你的[ii]尝试失败。

要多次读取文件,必须在每一轮之后调用file.seek(0)以将迭代器再次移动到开头,但将行读入变量会更有效。

您可能对file like objects感兴趣,也可能会考虑slice而不是xrange