浅谈python open()函数
1. 参数说明
open(filename,m)
filename:文件名
m:读写属性,有r、w、b、a、+等参数
r:读取模式打开文件
w:读写模式打开文件
a:写入模式打开文件
b:二进制模式打开文件(可以和其他模式并用)
+:读/写模式(可以和其他模式并用)
U:支持换行符(例如:\n、\r 或 \n\r 等)
2.关闭文件
首先,python中open文件后,会自动关闭文件,所以不显式主动关闭也是可以接受的。
第二,python自动关闭文件的时间是不确定的,所以主动关闭文件更好。
第三,最好的处理文件方式是使用上下文管理器with打开文件,这样可以确定文件关闭时间。
第四,使用f.close()显示关闭文件时,只是不能读写文件,但文件对象仍然存在。
3. 写文件注意事项
1)当open文件属性为仅w时,表示为复写文件。所谓复写文件,就是先清除原来数据,再写入新数据。敲黑板,重点来了:清除原来数据发生在使用open()函数时,而不是使用write()函数的时候。
所以:以下过程文件数据没有被清除:
>>> b = open('test_file.txt')
>>> c = open('test_file.txt')
>>> d = open('test_file.txt','r')
而以下过程文件数据被清除:
>>> b = open('test_file.txt')
>>> c = open('test_file.txt','w')
笔者之前要实现读取json文件,并改写某一个key的value,写过这样一段代码:
def set_config(key,value):
file = 'abc.conf'
f1 = open(file)
f2 = open(file,'w')
confdict = json.load(f1)
confdict.get((key,'')
json.dump(confdict,f2)
f1.close()
f2.close()
结果是程序一直报错,无法load文件内容。原因就在于在f2 = open(file,'w')这行代码中清除了数据,导致f1文件对象所指文件没有数据。
2)当open文件属性为r+w时,表示覆写,即写入数据时覆盖文件。该模式使用open()函数时并没有清除数据,使用write()或者json.load()方法时会从文件某个地方开始写,如果文件此处原来有数据,则覆盖,若没数据则追加。
举个例子:
file内容:'test'
运行一下代码:
>>> a = open('test_file.txt','r+w')
>>> a.write('hello')
>>> a.flush()
则file内容变为:hello'
接着运行以下代码:
>>> a.write('a')
>>> a.flush()
则file内容变为:helloa
3)当open文件属性为a时,表示追写文件。
file原内容:'test'
运行一下代码:
>>> a = open('test_file.txt','a')
>>> a.write('hello')
>>> a.flush()
则file内容变为:'test'hello
接着运行以下代码:
>>> a.write('a')
>>> a.flush()
则file内容变为:'test'helloa