《手把手陪您学Python》33——文件的关闭

在上一篇《手把手陪您学Python》32——文件的读取中,我们学习了读取文件的几种方法。这一篇中,我们将学习关闭文件的方法。

当我们使用open()打开并使用文件后,显式地关闭文件是非常重要而必要的一件事。如果不能很好地处理文件的关闭,可能会导致数据丢失或者受损。

其实在我们上一篇文章读取文件之后,就应该使用close()方法将文件关闭,但由于当时还没有涉及这部分内容,就没有进行文件关闭的操作,其实是一种不规范的做法。

关闭文件的方法有两种。

1、使用close()手动关闭文件

当我们对打开的文件进行完读取操作,包括后面要学习的写入操作后,就要使用close()方法将文件关闭,否则就可能导致数据或者文件的冲突或者错误。

close()方法本身很简单,但需要注意的是,在对文件进行关闭操作时,要记得是对打开的对象(file_object)进行关闭操作,而不是读取后的对象(file)进行关闭操作。

In [1]: path = 'lesson/text/contents.txt'
        file_object = open(path, encoding = 'utf-8')
        file = file_object.read()
        print(file.rstrip())
        file_object.close()
        file = file_object.read()   # 关闭文件后的再次读取
Out[1]: 《手把手陪您学Python》1——为什么要学Python?
        《手把手陪您学Python》2——Python的安装
        《手把手陪您学Python》3——PyCharm的安装和配置
        《手把手陪您学Python》4——Hello World!
        《手把手陪您学Python》5——Jupyter Notebook
        《手把手陪您学Python》6——字符串的标识
        《手把手陪您学Python》7——字符串的索引
        《手把手陪您学Python》8——字符串的切片
        《手把手陪您学Python》9——字符串的运算
        《手把手陪您学Python》10——字符串的函数
        ---------------------------------------------------------------------------
        ValueError                                Traceback (most recent call last)
        <ipython-input-5-90b7211a7dc0> in <module>
              4 print(file.rstrip()) 
              5 file_object.close()
        ----> 6 file = file_object.read()
        
        ValueError: I/O operation on closed file.

如同上面的错误一样,当文件关闭后是不能够再次读取的,错误信息也提示读取操作不能在关闭的文件上进行。

除了要记得在使用完文件后将文件关闭,还要注意文件关闭的时机。如果在我们还没有使用完文件就提前调用close()将文件关闭了,就可能导致程序的错误了。

使用with关键字就可以避免这种情况的出现。

2、使用with自动关闭文件

with关键字可以在其下面的程序全部运行完毕后自动关闭文件,既能够避免我们忘记关闭文件,也不会提早将文件关闭,是比较推荐的一种使用方法。

with关键字和for循环、if循环等关键字一样,都需要在关键字所在行的末尾增加冒号“:”,同时对with下的代码进行缩进,这样with才能够知道下面有哪些程序,什么时候运行完,之后再关闭文件。在文件关闭后的代码就不能再缩进了,而要和with保持同样的位置以进行区分。

对于使用with方法打开的文件对象的命名,可以使用as关键字,文件对象的名字就放在as之后。程序如同以下实例所示,同时也增加了再次读取的代码验证是否已经自动关闭。

由于我们已经学会了文件关闭的方法,所以后面的程序中,我们都会规范地将文件关闭,这也是我们养成良好编程习惯的开始。

下一篇我们将要学习文件写入的几种方法,和读取一样,这也是Python写入文件的基础原理,敬请关注。

 

图片

 


感谢阅读本文!如有任何问题,欢迎留言,一起交流讨论^_^

要阅读《手把手陪您学Python》系列文章的其他篇目,请关注公众号点击菜单选择,或点击下方链接直达。

《手把手陪您学Python》1——为什么要学Python?

《手把手陪您学Python》2——Python的安装

《手把手陪您学Python》3——PyCharm的安装和配置

《手把手陪您学Python》4——Hello World!

《手把手陪您学Python》5——Jupyter Notebook

《手把手陪您学Python》6——字符串的标识

《手把手陪您学Python》7——字符串的索引

《手把手陪您学Python》8——字符串的切片

《手把手陪您学Python》9——字符串的运算

《手把手陪您学Python》10——字符串的函数

《手把手陪您学Python》11——字符串的格式化输出

《手把手陪您学Python》12——数字

《手把手陪您学Python》13——运算

《手把手陪您学Python》14——交互式输入

《手把手陪您学Python》15——判断语句if

《手把手陪您学Python》16——循环语句while

《手把手陪您学Python》17——循环的终止

《手把手陪您学Python》18——循环语句for

《手把手陪您学Python》19——第一阶段小结

《手把手陪您学Python》20——列表

《手把手陪您学Python》21——元组

《手把手陪您学Python》22——字典

《手把手陪您学Python》23——内置序列函数

《手把手陪您学Python》24——集合

《手把手陪您学Python》25——列表推导式

《手把手陪您学Python》26——自定义函数

《手把手陪您学Python》27——自定义函数的参数

《手把手陪您学Python》28——自定义函数的返回值

《手把手陪您学Python》29——匿名函数

《手把手陪您学Python》30——模块

《手把手陪您学Python》31——文件的打开

《手把手陪您学Python》32——文件的读取

For Fans:关注“亦说Python”公众号,回复“手33”,即可免费下载本篇文章所用示例语句。

亦说Python——Python爱好者的学习分享园地
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值