码迷,mamicode.com
首页 > 编程语言 > 详细

python中open与with open的区别

时间:2019-12-06 11:26:40      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:作用   错误   hellip   资源   inf   ioerror   lis   磁盘   读写   

读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

技术图片

 

 

若文件不存在,open()函数就会抛出一个IOError的错误,并且给出错误码和详细的信息告诉你文件不存在:

技术图片

 

 

 若文件存在则正确读取文件中内容:

技术图片

结果:

技术图片

注:文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。

 

 

 由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,可以使用try … finally来实现:

技术图片

 

 结果:

技术图片

这样写太繁琐,所以,python引入了with语句来自动调用close()方法。

with创建临时运行环境:

作用:with用于创建一个临时的运行环境,运行环境中的代码执行完后自动安全退出环境。

文件操作:使用open进行文件操作时建议使用with创建运行环境,可以不用close()方法关闭文件,无论在文件使用中遇到什么问题都能安全的退出,即使发生错误退出运行环境时也可以安全退出文件并给出报错信息。

技术图片

结果:

技术图片

和前面的try … finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法。

调用read()会一次性读取文件的全部内容,如果文件有10G,内存空间会不足,因此,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。

如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:

 技术图片

python中open与with open的区别

标签:作用   错误   hellip   资源   inf   ioerror   lis   磁盘   读写   

原文地址:https://www.cnblogs.com/an-ning0920/p/11994018.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!