混淆了Python中的readline()返回

时间:2016-09-29 13:14:49

标签: python

我是python的初学者。但是,当我尝试使用readline()方法时,我遇到了一些问题。

f=raw_input("filename> ")
a=open(f)
print a.read()
print a.readline()
print a.readline()
print a.readline()

我的txt文件是

aaaaaaaaa
bbbbbbbbb
ccccccccc

但是,当我尝试在Mac终端上运行它时,我得到了这个:

aaaaaaaaa
bbbbbbbbb
ccccccccc

似乎readline()根本不起作用。 但是当我禁用print a.read()时,readline()会恢复工作。

这让我很困惑。有什么解决方案可以同时使用read()和readline()吗?

3 个答案:

答案 0 :(得分:5)

当你打开一个文件时,你会得到一个指向文件某个位置的指针(默认情况下:开头)。现在,无论何时运行.read().readline(),此指针都会移动:

  1. .read()读取直到文件结尾并将指针移动到结尾(因此进一步调用任何读数都不会产生任何结果)
  2. .readline()读取直到看到换行符并在其后面设置指针
  3. .read(X)读取X字节并将指针设置为CURRENT_LOCATION + X(或结束)
  4. 如果您希望通过发出a.seek(X)调用来手动移动该指针,其中X是文件中的位置(被视为字节数组)。例如,这应该为您提供所需的输出:

    print a.read()
    a.seek(0)
    print a.readline()
    print a.readline()
    print a.readline()
    

答案 1 :(得分:1)

您需要了解文件指针的概念。当您读取文件时,它将被完全使用,指针位于文件的末尾。

  

似乎readline()根本不起作用。

它按预期工作。没有可读的行。

  

当我禁用print a.read()时,readline()恢复工作。

因为指针位于文件的开头,并且可以读取行

  

有没有可以同时使用read()和readline()的解决方案?

不确定。翻转读取几行的顺序,然后翻转文件的其余部分,或者将文件指针移回到您想要的位置。

另外,不要忘记在阅读完毕后关闭文件

答案 2 :(得分:0)

文件对象a会记住它在文件中的位置。

  • a.read()从当前位置读取到文件末尾(将位置移动到文件末尾)
  • a.readline()从当前位置读取到行尾(将位置移动到下一行)
  • a.seek(n)移动到文件中的位置n(不返回任何内容)
  • a.tell()返回文件中的位置。

因此,首先尝试将调用放入readline。您会注意到,现在读取调用不会返回整个文件,只返回剩余的行(可能没有),具体取决于您调用readline的次数。并且寻找并告诉我们确认最新情况。

详情here