我是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()吗?
答案 0 :(得分:5)
当你打开一个文件时,你会得到一个指向文件某个位置的指针(默认情况下:开头)。现在,无论何时运行.read()
或.readline()
,此指针都会移动:
.read()
读取直到文件结尾并将指针移动到结尾(因此进一步调用任何读数都不会产生任何结果).readline()
读取直到看到换行符并在其后面设置指针.read(X)
读取X字节并将指针设置为CURRENT_LOCATION + X
(或结束)如果您希望通过发出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。