我已经阅读了文档,但是 readlines(n) 是做什么的?通过 readlines(n),我的意思是 readlines(3) 或任何其他数字。
当我运行 readlines(3) 时,它返回与 readlines() 相同的内容。
我已经阅读了文档,但是 readlines(n) 是做什么的?通过 readlines(n),我的意思是 readlines(3) 或任何其他数字。
当我运行 readlines(3) 时,它返回与 readlines() 相同的内容。
可选参数应该表示从文件中读取了多少(大约)字节。该文件将被进一步读取,直到当前行结束:
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 字节的整行(可能在四舍五入到内部缓冲区大小之后)。如果 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
它列出了行,给定字符大小“n”从当前行开始跨越这些行。
例如:在一个text
文件中,内容为
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']
根据文件的大小, readlines(hint) 应该返回一组较小的行。从文档中:
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,它一次只能读取那么多字节 + 足以完成下一行,返回所有已完全读取的行。