概述
使用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()
最后
以上就是欢喜花卷为你收集整理的pythonreadlineshint_关于python中readlines()函数中hint参数的使用的全部内容,希望文章能够帮你解决pythonreadlineshint_关于python中readlines()函数中hint参数的使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复