第9.5节 Python的readlines读取文件内容及其参数hint使用分析
一、 语法
readlines(hint=-1)
readlines函数用于从文件或流中一次性读取多行数据,返回数据存入一个列表中。
参数hint释义:
这个参数在readlines的官方文档说明是用于控制读取的行数,如果总行数字符数量超出了hint参数指定只会读取该参数指定的大小。但老猿经过验证,该参数取值其实还是很有意思的:
1、 在文本文件模式下,字符数量是以UNICODE编码的字符集的字符为单位来计算的,即支持多字节的字符,如中文一个汉字表示1字符,并且计算数量时剔除了换行符;
2、 在二进制模式下,字符数量是以ASCII码对应的单字节为单位来计算的,不剔除换行符,字符‘\n’占用一个字节长度;
3、 如果hint大于前n行的总字数但小于前n+1行的总字数,则执行函数会读取文件的前n+1行;
4、 当hint小于等于0时,读取整个文件的内容。
二、 案例
- 案例说明
以一个存储如下唐诗的文件为例来进行读取:
滁州西涧
[唐] 韦应物
独怜幽草涧边生,上有黄鹂深树鸣。
春潮带雨晚来急,野渡无人舟自横。
在测试读取时,如果发现读取的内容跟上次读取文件的内容一样时不输出,否则输出读取的字符数和对应读取内容。这样我们就可以清楚知道,读取的数量变化到什么数字时才会读取到更多的内容,也可以观察计数单位是ASCII字节还是UNICODE字符。
3. 以文本文件方式读取
>>> def readtxtfile(n):
fp = open(r"c:\temp\test.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('\n')
>>> testreadtxt()
read 1 chacters:
滁州西涧
read 5 chacters:
滁州西涧
[唐] 韦应物
read 13 chacters:
滁州西涧
[唐] 韦应物
独怜幽草涧边生,上有黄鹂深树鸣。
read 30 chacters:
滁州西涧
[唐] 韦应物
独怜幽草涧边生,上有黄鹂深树鸣。
春潮带雨晚来急,野渡无人舟自横。
执行截屏:
3. 以二进制方式读取
>>> def readbinfile(n):
fp = open(r"c:\temp\test.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
请大家多多支持,点赞、评论和加关注!谢谢!