导读
在编写Python代码的时候,经常会操作各种文件,而在操作文件的时候,我们会经常用到:open()
和 with open() as...
这两种句式。那么这两个句式有什么不一样呢?
open( )
例如:
fp = open("./aa.txt", "w+")
fp.write("This is a text file.")
fp.close()
以上是一个标准的文件操作(写)流程,分别由"打开文件"--"写入文件内容"--"关闭文件"这三个步骤完成。但这只是简短的几行代码,逻辑非常的清晰,但当操作写入文件中的语句(内容)多了后,往往程序员会忘记"关闭"这个文件。
下面从系统资源分配层面来讲,系统在执行这个程序时,都需要做些什么。
首先,在执行fp = open("./aa.txt", "w+")
这行语句时,系统需要为这个文件操作腾出一个空地(运行内存),一直供这个文件操作使用,直至执行fp.close()
语句时,相应的内存空间才会被释放。
那么,如果程序员真的忘记关闭这个文件了,这时候就造成了系统资源的长期占用(造成了浪费),又或者说,当程序发生了异常,而没能关闭
这个文件,那么后面想执行文件删除、移动等操作就行不通了。
with... as...
为了解决上述的问题,Python提供了 with...as...语句来解决这一问题,下面这来看其操作过程:
with open("./aa.txt", "w+") as fp:
fp.write("This is a text file.")
print(fp.closed())
上面的操作,我们只操作了前两步,即"打开文件"--"写入内容","关闭文件"这一步没有了。原因是,with...as...是根据代码块(隶属)关系进行工作的,当程序执行在代码块内时,文件会一直保持打开状态,一旦当程序离开这个代码块(即不隶属这个区间)时,程序就会自动的关闭这个文件,实现更好的文件管理,最优的使用系统资源。
通过最后的文件状态查看语句"fp.closed()"可以看到文件退出该区块时,已经自动关闭了该文件。