第9.5节 Python的readlines读取文件内容及其参数hint使用分析

一、 语法
readlines(hint=-1)
readlines函数用于从文件或流中一次性读取多行数据,返回数据存入一个列表中。
参数hint释义:
这个参数在readlines的官方文档说明是用于控制读取的行数,如果总行数字符数量超出了hint参数指定只会读取该参数指定的大小。但老猿经过验证,该参数取值其实还是很有意思的:
1、 在文本文件模式下,字符数量是以UNICODE编码的字符集的字符为单位来计算的,即支持多字节的字符,如中文一个汉字表示1字符,并且计算数量时剔除了换行符;
2、 在二进制模式下,字符数量是以ASCII码对应的单字节为单位来计算的,不剔除换行符,字符‘ ’占用一个字节长度;
3、 如果hint大于前n行的总字数但小于前n+1行的总字数,则执行函数会读取文件的前n+1行;
4、 当hint小于等于0时,读取整个文件的内容。

二、 案例

  1. 案例说明

以一个存储如下唐诗的文件为例来进行读取:
滁州西涧
[唐] 韦应物
独怜幽草涧边生,上有黄鹂深树鸣。
春潮带雨晚来急,野渡无人舟自横。

在测试读取时,如果发现读取的内容跟上次读取文件的内容一样时不输出,否则输出读取的字符数和对应读取内容。这样我们就可以清楚知道,读取的数量变化到什么数字时才会读取到更多的内容,也可以观察计数单位是ASCII字节还是UNICODE字符。
3. 以文本文件方式读取

>>> def readtxtfile(n):
    fp = open(r"c:	emp	est.txt","r")
    lines=fp.readlines(n)
    fp.close()
    return lines

		  
>>> def testreadtxt():
    lines0=[]
    for i in range(1,100):
        lines1=readtxtfile(i)
        if lines0!= lines1:
            print(f"read {i} chacters:")
            for l in lines1:print(l,end='')
            lines0=lines1
            print('
')
		  
>>> testreadtxt()
		  
read 1 chacters:
滁州西涧

read 5 chacters:
滁州西涧
[唐] 韦应物

read 13 chacters:
滁州西涧
[唐] 韦应物
独怜幽草涧边生,上有黄鹂深树鸣。

read 30 chacters:
滁州西涧
[唐] 韦应物
独怜幽草涧边生,上有黄鹂深树鸣。
春潮带雨晚来急,野渡无人舟自横。

执行截屏:
在这里插入图片描述
3. 以二进制方式读取

>>> def readbinfile(n):
    fp = open(r"c:	emp	est.txt","rb")
    lines=fp.readlines(n)
    fp.close()
    return lines

		  
>>> def testreadbin():
    lines0=[]
    for i in range(1,100):
        lines1=readbinfile(i)
        if lines0!= lines1:
            print(f"read {i} chacters:")
            for l in lines1:print(l.decode('GBK'),end='')
            lines0=lines1
            print('')

		  
>>> testreadbin()
read 1 chacters:
滁州西涧 
read 10 chacters:
滁州西涧 [唐] 韦应物 
read 23 chacters:
滁州西涧 [唐] 韦应物 独怜幽草涧边生,上有黄鹂深树鸣。 
read 57 chacters:
滁州西涧 [唐] 韦应物 独怜幽草涧边生,上有黄鹂深树鸣。 春潮带雨晚来急,野渡无人舟自横。 

>>>

执行截屏:
在这里插入图片描述
本节介绍了readlines的用法,并通过案例详细分析了其参数hint的作用。

老猿Python,跟老猿学Python!
博客地址:https://blog.csdn.net/LaoYuanPython

请大家多多支持,点赞、评论和加关注!谢谢!

原文地址:https://www.cnblogs.com/LaoYuanPython/p/13643693.html