首页 > 为什么使用seek()后readline()读取不了最后一行

为什么使用seek()后readline()读取不了最后一行

先上代码:

from sys import argv
script, filename = argv

f = open(filename)
f.seek(6)
print f.readline()
print f.readline()
print f.readline()

然后是txt文件:

12345
abcdef
3333333
44444444

最后是powershell里显示的:

abcdef
3333333

求问为什么读不出最后一行来
如果将seek(6)改成seek(0)就不会出现这种情况


首先说结论

你的第五行代码的print f.readline()打印出了换行符\n,如果想打印出文本的最后一行,可以有两个方法:


我想说我是如何解决这个问题的。

我复制了你的代码(进行了些微改动),然后运行,你说的情况出现了:没有打印出最后一行

于是我想知道发生了什么,开始进行一个个排除。

首先,我删除了最后一行代码(第八行的print f.readline()),发现打印的内容少了一行。从而确定,不是最后一行没打印文本,而是前面的两个print f.readline()之一没有打印文本。通过再删除第七行的print f.readline()确认问题:第六行的代码没有输出想要的文本。其结果如下:

就是一行空白。

然后,我开始查看:打印出来的是字符串类型吗?通过isinstance(..., str),确认其为字符串。

再然后,我猜想:是不是打印了不可见字符(如换行符换页符等等)。于是通过代码:

print list(f.readline())

将其转换为列表打印出来。得到结果:其打印了一个换行符。


现在问题就可以解决了。如果以后出现这类问题,可以用以下方法解决:

  1. 单步调试:这个可以参考教程调试

  2. 自己增加或删除代码查看结果

  3. 如果都做过了还是无法解决问题,可以把过程发出来,到问答社区(比如这里),大家或许能帮你解决呢~


如果读到这里,你也算是坚强,我也只会说这些了,再见~

【热门文章】
【热门文章】