关于python中readlines()函数中hint参数的使用

Petunia ·
更新时间:2024-09-21
· 890 次阅读

使用readlines() :用于从文件或流中一次性读取多行数据,返回数据存入一个列表中。读取文件内容的基本格式为:文件对象.readlines(hint) 

例如:

fname=open("《成都》歌词.txt","rt",encoding="utf-8")

则有:fname.readlines(hint) 

其中hint的取值很麻烦,在网上查阅很多资料,入坑不少,最终自己总结出来:

1、hint为0或hint为-1:用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for... in ... 结构进行处理。

如果碰到结束符 EOF 则返回空字符串。

如:
print(fname.readlines(-1)
print(fname.readlines(0))

输入结果均为:


2、hint为非0和非-1。

(1)对于文本数据,字符数量以UNICODE编码字符集的字符为单位计算。支持多字节的字符,如中文一个汉字表示1字符,空格算一个字符。对于文本文件,换行符是否计入字符,有如下两种情况:

)指定字符数中间包含\n,则\n算做字符; )如果\n在指定内容末尾,则不计入字符,算作换行符。

(2) 在二进制模式下,字符数量是以ASCII码对应的单字节为单位来计算的,不剔除换行符,字符‘\n’占用一个字节长度;

(3) 如果hint大于前n行的总字数但小于前n+1行的总字数,则执行函数会读取文件的前n+1行;

3、示例:

(1)以文本数据类型读取数据示例

1)代码示例解释:
ls0=fname.readlines(14)

print(ls0)

注释:第一行包括空格,共14个字符+一个“\n”,因为处于末尾,所以当做换行符,不计入字符数量中。

ls0=fname.readlines(14) ls1=fname.readlines(15) print(ls2)

注释:hint为15,超过第1行字符数14,所以读取鼠标所在位置之后(1+1=)2的内容。 ls0=fname.readlines(14) 2)代码示例解释: ls2=fname.readlines(28) ls3=fname.readlines(29) print(ls2) print(ls3)

注释:虽然两行中包括空格在内的数据共28个,但是hint为28时,同样不会输出光标所在位置之后前3行的内容,hint为29时也一样,原因在于读取两行数据时,前一行数据结果默认的\n符算作了字符,所以总字符数必须加1,为此,两行的总字符数为29,要想读取文件读取光标所在位置之后三行的内容,输入的hint参数数值必须大于29,如30即可,如下所示:

ls0=fname.readlines(14) ls4=fname.readlines(30) print(ls4)

ls0=fname1.readlines(14)

(2)以二进制方式读取数据示例

二进制方式读取是,hint的取值与文件存储的编码类型有关。如果是ASCI编码,则1个英文占1个字节,1个汉字2个字节;如果以UTF-8方式存储,则1个英文占1个字节,1个汉字占3个字节。以utf-8编码模式为例,有如下示例:

ls0=fname1.readlines(14)#验证是否1个汉字占1个字节。 print(ls0) ls1=fname1.readlines(28)#验证是否1个汉字占2个字节。 print(ls1) ls2=fname1.readlines(42)#验证是否1个汉字占3个字节。每行13个汉字,1个空格(占1个字节),1个\n符(占1个字节),所以当hint取值大于3*13+2=41时,读取前两行。 print(ls2) fname1.close()

奔跑的毛毛虫 原创文章 22获赞 12访问量 5万+ 关注 私信 展开阅读全文
作者:奔跑的毛毛虫



readlines 函数 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号