fileObject = open(file_name [, access_mode][, buffering])
fileObject.close()
其中access_mode
决定了打开文件的模式:只读,写入,追加等。这个参数是非强制的,默认文件访问模式为只读r
。
下表是对文件打开模式的一个很好的总结,留意一下rw
的指针都在开始,a
的指针在结尾。所以虽然w+
虽然可以实现写入,但需将指针移到文件结尾才不会覆盖文件内容。
fileObject.read()
,全部读入fileObject.readline()
,逐行读取数据fileObject.readlines()
,全部读入且将文件内容按行以列表的形式存放fileObjet.next()
,逐行读取数据,和readline()
相似,唯一不同的是,readline()
读取到最后如果没有数据会返回空,而next()
没读取到数据则会报错fileObject.writelines()
,将列表进行多行写入现在有一个test
文件,其中只有一行内容为test
。
with open('tmp/test.txt', 'w+') as f: # +实现可读,不然下面的read会报错
text1 = f.read()
print('text1:', text1) # text1为空,因为w打开时,对文件覆盖了
f.write('add one more line')
text2 = f.read() # text2为空,因为w写完后,指针指向文件末尾
print('text2:', text2)
f.seek(0) # 重新将指针指向文件开头
text3 = f.read()
print('text3:', text3)
>>>
text1:
text2:
text3: add one more line
with open('tmp/test.txt', 'a+') as f: # +实现可读,不然下面的read会报错
text1 = f.read()
print('text1:', text1) # text1为空,因为a打开时,指针指向文件末尾
f.write('add one more line')
text2 = f.read() # text2为空,因为a追加后,指针指向新的文件末尾
print('text2:', text2)
f.seek(0) # 重新将指针指向文件开头
text3 = f.read()
print('text3:', text3) # text3发现f并不会自动添加换行符号
>>>
text1:
text2:
text3: testadd one more line
with open('tmp/test.txt', 'r+') as f: # +实现可写,不然下面的write会报错
text1 = f.read()
print('text1:', text1) # text1不为空,因为r+,指针指向文件开头
f.write('add one more line')
text2 = f.read() # text2为空,因为+追加后,指针指向新的文件末尾
print('text2:', text2)
f.seek(0) # 重新将指针指向文件开头
text3 = f.read()
print('text3:', text3) # text3发现test被覆盖了,因为是从文件开头开始写入的
>>>
text1: test
text2:
text3: testadd one more line
在使用过程中,一定要搞清楚指针当前所处的位置。
参考:
1,https://www.runoob.com/python/python-files-io.html
2,https://www.cnblogs.com/hackpig/p/8215786.html