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

使用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))

输入结果均为:

97bd9bdcc332c18f6953092f583d9cfe.png

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”,因为处于末尾,所以当做换行符,不计入字符数量中。

b8c478da0bf91cf039faf142e5297d51.png

ls0=fname.readlines(14)

ls1=fname.readlines(15)

print(ls2)

a0788cd05e0cf087b1b851efa9788282.png

注释:hint为15,超过第1行字符数14,所以读取鼠标所在位置之后(1+1=)2的内容。

ls0=fname.readlines(14)

2)代码示例解释:

ls2=fname.readlines(28)

ls3=fname.readlines(29)

print(ls2)

print(ls3)

6bf2e4db9920bda96eeb35b1af63bfac.png

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

ls0=fname.readlines(14)

ls4=fname.readlines(30)

print(ls4)

96e4f3594bdcb5eae520537ba11dd1a0.png

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()

5f6589335d309cf552acf1f9a46ed53e.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值