在Python中到达文件末尾时readline返回什么值?

时间:2017-07-10 18:29:59

标签: python readline

可以使用经典循环

file_in = open('suppliers.txt', 'r')
line = file_in.readline()

while line:
    line = file_in.readline()

在Python中逐行读取文件。

但是当循环退出时,'line'有什么价值? Python 3文档只读:

  

的readline(大小= -1)

     

从流中读取并返回一行。如果指定了大小,则为   将读取大多数大小的字节。

     

对于二进制文件,行终止符总是b'\ n';对于文本文件,   open()的换行参数可用于选择行   终结者被认可。

修改

在我的Python版本(3.6.1)中,如果以二进制模式打开文件,help(file_in.readline)会给出

readline(size=-1, /) method of _io.BufferedReader instance

    Read and return a line from the stream.

    If size is specified, at most size bytes will be read.

    The line terminator is always b'\n' for binary files; for text
    files, the newlines argument to open can be used to select the line
    terminator(s) recognized.

docs quoted above完全相同。但是,如Steve Barnes所述,如果您以文本模式打开文件,则会收到有用的注释。 (哎呀!我的复制粘贴错误)

3 个答案:

答案 0 :(得分:4)

在打开文件的python控制台中, f ,然后在其readline方法上调用help会告诉您:

>>> f = open('temp.txt', 'w')
>>> help(f.readline)
Help on built-in function readline:

readline(size=-1, /) method of _io.TextIOWrapper instance
    Read until newline or EOF.

    Returns an empty string if EOF is hit immediately.

每个readline对当前点的文件的剩余部分进行操作,因此最终会达到EOF。

请注意,如果您使用rb而不是r以二进制模式打开文件,那么您将获得<class '_io.TextIOWrapper'>对象而非<class '_io.BufferedReader'>对象 - 然后帮助信息不同:

Help on built-in function readline:

readline(size=-1, /) method of _io.BufferedReader instance
    Read and return a line from the stream.

    If size is specified, at most size bytes will be read.

    The line terminator is always b'\n' for binary files; for text
    files, the newlines argument to open can be used to select the line
    terminator(s) recognized.

当此方法到达EOF时,它将返回一个空字节数组b''而不是空字符串。

请注意,以上所有内容都是在Win10上使用python 3.6进行测试的。

答案 1 :(得分:3)

从教程:https://docs.python.org/3.6/tutorial/inputoutput.html#methods-of-file-objects

  

f.readline()从文件中读取一行;换行符   (\n)留在字符串的末尾,并且只在其中省略   如果文件不以换行符结尾,则为文件的最后一行。这使得   返回值明确;如果f.readline()返回空   字符串,已到达文件的末尾,而空白行是   由'\n'表示,只包含一个换行符的字符串。

答案 2 :(得分:0)

在(Python 3)控制台中运行问题的代码片段显示它返回一个空字符串,如果以二进制模式打开文件,则返回一个空的Bytes对象。

这是在某处记录的吗?也许这是一个广泛的蟒蛇标准?