文件关闭中的with as
在操作文件的时候,通常为了避免不必要的问题(程序退出时,因为垃圾回收机制,程序也会自动的关闭文件对象,但是这是我们不可控的;在有些操作系统和设置中,关闭文件可以避免无意义地锁定文件),我们通常要在打开文件之后要去关闭文件。
如果对文件进行了写入操作的时候,一定要注意将其关闭,因为Python可能缓冲写入的数据(将数据暂时保存在内存区,提高程序运行效率),因此如果程序抛出异常或者因为某种原因而中断,那么数据可能无法写入到文件中,所以想要保证数据安全的话,使用完文件后就将其关闭!如果想要暂时不关闭文件,但是又想要重置缓冲,让所做的文件修改立即反应到磁盘上的文件中,可以使用文件对象的flush方法。
python的实现中,调用write后,只是把数据写到内核缓冲区,实际上并没有把数据写到磁盘上,只有调用close或是内核缓冲区满的情况下,数据才会写入磁盘中。调用文件对象的flush函数,在每次写入文件的时候把数据输出到磁盘(加载到缓冲区),
然而,需要注意的是,根据使用的操作系统和设置,flush可能出于锁定考虑而禁止其他正在运行的程序访问这个文件。而且系统频繁的将数据写到磁盘,会比较耗CPU。
所以说,如果没有特别的需求,尽可能的关闭文件。
要确保文件得以关闭,可使用一条try/finally语句,并在finally子句中调用close。
# 打开文件
f = open('test.txt','w+')
try:
# 将数据写入到文件中
f.write('Test')
finally:
# 无论程序是否异常,确保关闭文件
f.close()
上面是一种写法,Python提供了with as结构,这是专门为此设计