Python的函数readlines(n)行为

时间:2013-01-26 19:58:52

标签: python python-2.7

我读过the documentation,但readlines(n)做了什么?通过readlines(n),我的意思是readlines(3)或任何其他数字。

当我运行readlines(3)时,它返回与readlines()相同的东西。

3 个答案:

答案 0 :(得分:12)

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

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.

另一句话:

  

如果给出一个可选参数 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']

有人可能认为文档中的以下短语对此进行了解释:

  

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

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

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

在我的系统上,这个内部缓冲区大小似乎是大约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

答案 1 :(得分:1)

  

它列出了,通过它们,给定的字符大小' n'跨度   从当前行开始。

Ex:在 one two three four 文件中,内容为

open('text').readlines(0)

['one\n', 'two\n', 'three\n', 'four\n']返回open('text').readlines(1)

['one\n']返回open('text').readlines(3)

['one\n']返回open('text').readlines(4)

['one\n', 'two\n']返回open('text').readlines(7)

['one\n', 'two\n']返回open('text').readlines(8)

['one\n', 'two\n', 'three\n']返回open('text').readlines(100)

['one\n', 'two\n', 'three\n', 'four\n']返回deleteMe()

答案 2 :(得分:0)

根据文件的大小,readlines(提示)应该返回一组较小的行。来自文档:

f.readlines() returns a list containing all the lines of data in the file. 
If given an optional parameter sizehint, it reads that many bytes from the file 
and enough more to complete a line, and returns the lines from that. 
This is often used to allow efficient reading of a large file by lines, 
but without having to load the entire file in memory. Only complete lines 
will be returned.

所以,如果你的文件有1000行,你可以传入说... 65536,它一次只读取那么多字节+足以完成下一行,返回所有行完全阅读。