python中open() read() readline() readlines()方法详解

提到read() readline() readlines()这几个方法不免提一下open(),open()常用的参数有mode、errors、encoding。这里只说一下encoding,原因是有些困惑。如下

在默认情况下(encoding = None)(作者认为是Unicode)。现在进行如下操作(all.txt是一个utf-8编码的文本,里面是汉字)

f = open('../all.txt','r',errors = 'ignore')
a = f.read()
print(type(f))
print(type(a))
print(a)
f.close()

结果如下

<class '_io.TextIOWrapper'>
<class 'str'>

------------

绗涓鍗

如果将encoding设为utf-8即可打印出正常文本,解释如下unicode对汉字的编码一般是2个字节而utf-8一般为3个字节,这里我用error = ‘ignore’来忽视这种错误,故打印出乱码,倘若不加这个参数,程序便会报错。

这里可以经过isintance(f,Iterator)来判断,可推出f是迭代器可以用for来遍历,f中的数据流是字符流。这里就有一些矛盾,encoding在意思上应该是编码,即f中的数据流应该是bytes流而非字符,所以推断open函数有这样的功能。例如:

a = 'a'
print(a.encode('utf-8'))

结果如下

b'a'
请按任意键继续. . .

好如果理解这层意思下面看read(size)这其中的size是字节数还是字符数

f = open('../all.txt','r',encoding = 'utf-8')
a = f.read(100)
print(a)
f.close()

结果如下

(size=100)

------------

第一卷


------------

第一章 陨落的天才

    第一章  陨落的天才(本章免费)

    “斗之力,三段!”

    望着测验魔石碑上面闪亮得


(size = 101)

------------

第一卷


------------

第一章 陨落的天才

    第一章  陨落的天才(本章免费)

    “斗之力,三段!”

    望着测验魔石碑上面闪亮得甚


(size = 102)

------------

第一卷


------------

第一章 陨落的天才

    第一章  陨落的天才(本章免费)

    “斗之力,三段!”

    望着测验魔石碑上面闪亮得甚至

如果上面看懂的话,结果不言而喻是字符数而非字节数。

哪为什么网上大多数会说是字节数呢,其实很简单当你的文本是用ASCII编码时字节数等于字符数所以如此,而我是因为读了汉字所以有误差,故试了试发现是字符数。

言归正传

read(size)当size不指定时,会将文件全部内容读取

readline()一次只读取一行即遇到‘\n’返回

readlines()读取整个文件,并返回列表,一行为一个元素

在这里想到一个问题windows自带的记事本当文本很大时,便会读取很慢,所以可否添加一个打开方式,使文本打开用只读取适当大小内容打开,读者可以一边看一边在读取新的内容。

最后感谢你的阅读。

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值