Python的函数readlines(n)行为

use*_*613 12 python python-2.7

我已经阅读了文档,但readlines(n)做了什么?通过readlines(n),我的意思是readlines(3)或任何其他数字.

当我运行readlines(3)时,它返回与readlines()相同的内容.

Lev*_*sky 13

可选参数应表示从文件中读取多少(大约)字节.该文件将被进一步读取,直到当前行结束:

readlines([size]) -> list of strings, each a line from the file.

Call readline() repeatedly and return a list of the lines so read.
The optional size argument, if given, is an approximate bound on the
total number of bytes in the lines returned.
Run Code Online (Sandbox Code Playgroud)

另一个引用:

如果给定一个可选的参数sizehint,它会从文件读取多个字节,并且足以完成一行,并从中返回行.

你是对的,它似乎对小文件没有太大作用,这很有趣:

In [1]: open('hello').readlines()
Out[1]: ['Hello\n', 'there\n', '!\n']

In [2]: open('hello').readlines(2)
Out[2]: ['Hello\n', 'there\n', '!\n']
Run Code Online (Sandbox Code Playgroud)

有人可能认为文档中的以下短语解释了它:

使用readline()读取EOF并返回包含如此读取的行的列表.如果存在可选的sizehint参数,则不会读取到EOF,而是读取总计近似sizehint字节的整行(可能在四舍五入到内部缓冲区大小之后).如果无法实现或无法有效实现,则实现类文件接口的对象可以选择忽略sizehint.

但是,即使我尝试在没有缓冲的情况下读取文件,它似乎也没有改变任何东西,这意味着其他类型的内部缓冲区意味着:

In [4]: open('hello', 'r', 0).readlines(2)
Out[4]: ['Hello\n', 'there\n', '!\n']
Run Code Online (Sandbox Code Playgroud)

在我的系统上,这个内部缓冲区大小似乎是大约5k字节/1.7k行:

In [1]: len(open('hello', 'r', 0).readlines(5))
Out[1]: 1756

In [2]: len(open('hello', 'r', 0).readlines())
Out[2]: 28080
Run Code Online (Sandbox Code Playgroud)

  • @ user2013613我很乐意,但我不认为在这里使用其他语言是个好主意. (3认同)