IO-文件

一 文件读写

读文件,使用python内置的open()函数,传入文件名合标示符
f = open(’/Users/michael/test.txt’, ‘r’)
read()方法可以一次读取文件的全部内容,python把内容读到内存,用一个str表示
最后调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。

由于文件读写时都有可能产生IOerror,一旦出错关闭方法就不会调用,为了保证一定能正确的关闭文件,我们可以用 try…finally实现:
try:
f = open(’/path/to/file’, ‘r’)
print(f.read())
finally:
if f:
f.close()
更简洁的方法:
with open()as f:
功能函数。

问题说明

调用read()会一次性读取文件的全部内容,如果文件有10g,内存就爆了,所以可以反复调用read(size)方法,每次最多读取size个字节的内容。
调用readline()可以每次读取一行内容,调用readlines()一次性读取所有内容并按行返回list。按需调用。

file-like Object

open()函数返回的有read()方法的对象,在python中统称为file-like object,除了file外,还可以是内存的字节流,网络流,自定义流等等。这个object不要求从特定类继承,只要写个read()方法就行。
StringIO就是在内存中创建的file-like Object,常用作临时缓冲。

二进制文件

前面默认都是读取文本文件,且utf-8编码。
如果是读取二进制文件(图片、视频等),用‘rb’模式打开文件即可。

字符编码

读取非utf-8编码的文本文件,需要给open()函数传入encoding参数
eg:读取gbk编码的文件:
f = open(’/Users/michael/gbk.txt’, ‘r’, encoding=‘gbk’)
如果文本文件中夹杂了一些非法编码的字符。遇到这种情况,会报错,简单处理的话可以直接忽略。
f = open(’/Users/michael/gbk.txt’, ‘r’, encoding=‘gbk’, errors=‘ignore’)

写文件

和读文件一样,区别是传入标识符改为‘w’ 或者‘wb’
可以反复调用write()写入文件,但是务必要用close关闭文件
直接用w写入文件,会直接覆盖。
如果不想覆盖可以追加到文件末尾,使用‘a’,以追加(append)模式写入。

with语句补充

with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等。
with expression [as target]:

with_body

参数说明:

expression:是一个需要执行的表达式;

target:是一个变量或者元组,存储的是expression表达式执行返回的结果,可选参数。
with语句的工作原理:

紧跟with后面的语句会被求值,返回对象的__enter__()方法被调用,这个方法的返回值将被赋值给as关键字后面的变量,当with后面的代码块全部被执行完之后,将调用前面返回对象的__exit__()方法。

with语句最关键的地方在于被求值对象必须有__enter__()和__exit__()这两个方法,那我们就可以通过自己实现这两方法来自定义with语句处理异常。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值