read、readline和readlines的区别是什么
题目分析:对于不同的父类,有不同的read、readline、readlines,分别是:
- 父类StreamReader 用于读取指定编码的字符文件,读取文本数据,返回的是字符数据
- 父类BufferedReader 用于读取二进制数据,返回的是字节数据
字符和字节的不同查看:链接: link
首先先看StreamReader中的read、readline和readlines
先看官方文档:
read()
read(size = -1, chars = -1,firstline = False)
解码来自流的数据并返回结果对象。
chars 参数指明要返回的解码后码位或者字节数量。read()方法绝不会返回超出请求数量的数据,可能会少于。
size 参数指明要读取并解码的已编码字节的最大数量近似值。默认-1表示尽可能对的读取并解码。解码器可以适当地修改此设置。 此形参的目的是防止一次性解码过于巨大的文件。
firstline旗帜指明如果在后续行发生错误,则进返回第一行就足够了。
此方法应当使用“贪婪”读取策略,这意味着它应当在编码格式定义和给定大小所允许的情况下尽可能多地读取数据,例如,如果在流上存在可选的编码结束或状态标记,这些内容也应当被读取。
readline()
readline(size=None, keepends=True)
从输入流读取一行并返回解码后的数据。
如果给定了 size,则将其作为 size 参数传递给流的 read() 方法。
如果 keepends 为假值,则行结束符将从返回的行中去除。
readlines()
readlines(sizehint=None, keepends=True)
从输入流读取所有行并将其作为一个行列表返回。
行结束符会使用编解码器的 decode() 方法来实现,并且如果 keepends 为真值则会将其包含在列表条目中。
如果给定了 sizehint,则将其作为 size 参数传递给流的 read() 方法。
个人理解:
read(size = -1,chars = -1, firstline=False) 会根据传参进行解码来自流的对象并返回,
firstline默认为False,表示读取整个文件。如果设置为 True,read()方法将只读取第一行的内容。
read(size=-1, chars=-1, firstline=False)是对read()方法的参数进行说明。下面是对每个参数的解释:
size:可选参数,表示读取的字节数。默认值为-1,表示读取整个文件。如果指定了一个正整数值,read()方法将读取指定字节数的数据。chars:可选参数,表示读取的字符数。默认值为-1,表示读取整个文件。如果指定了一个正整数值,read()方法将读取指定字符数的数据。firstline:可选参数,表示是否只读取第一行。默认值为False,表示读取整个文件。如果设置为True,read()方法将只读取第一行的内容。
请注意,这些参数是互斥的,只能选择其中一个进行使用。如果指定了size参数,则会忽略chars参数;如果指定了chars参数,则会忽略size参数。如果firstline参数设置为True,则会忽略size和chars参数。
再看BufferedReader中的read、readline和readlines
read()
read(size=-1, /)
从对象中读取 size 个字节并将其返回。 作为一个便捷选项,如果 size 未指定或为 -1,则返回所有字节直到 EOF。 在其他情况下,仅会执行一次系统调用。 如果操作系统调用返回字节数少于 size 则此方法也可能返回少于 size 个字节。
如果返回 0 个字节而 size 不为零 0,这表明到达文件末尾。 如果处于非阻塞模式并且没有更多字节可用,则返回 None。
readline()
readline(size=-1, /)
从流中读取并返回一行。如果指定了 size,将至多读取 size 个字节。
对于二进制文件行结束符总是 b’\n’;对于文本文件,可以用将 newline 参数传给 open() 的方式来选择要识别的行结束符。
readlines()
readlines(hint=-1, /)
从流中读取并返回包含多行的列表。可以指定 hint 来控制要读取的行数:如果(以字节/字符数表示的)所有行的总大小超出了 hint 则将不会读取更多的行。
0 或更小的 hint 值以及 None,会被视为没有 hint。
请注意,在不调用 file.readlines() 的情况下使用 for line in file: … 来遍历文件对象已经成为可能。
个人理解
read、readline和readlines他们分别都有要读取数量的参数size、hint

读取size为6,如下图:


读取size为2,如下图

在默认情况下 read读取所有并返回、readline读取一行并返回,如果他们指定了size则读取指定的size并返回。
readlines默认情况下会hint为负数,则视为读取所有的行并返回,单是它返回的是一个列表!

文章详细比较了Python中的StreamReader和BufferedReader类的read,readline,readlines方法,解释了它们的参数、功能及适用场景,特别是关于字符数据和字节数据的区别。

1万+

被折叠的 条评论
为什么被折叠?



