读模式 | r | 打开不存在的文件会报错、不能写;如不指定模式则默认是r |
写模式 | w | 打开不存在的文件会,会新建一个文件;打开存在的文件会先清空后覆盖原有文件;不能读 |
追加模式 | a | 打开不存在的文件会,会新建一个文件;不能读 |
读写模式 | r+ | 能写,打开不存在的文件会报错 |
写读模式 | w+ | 能读,但是读不到内容,因为w先把文件内容清空了 |
追加读模式 | a+ | 能读,但读不到内容,因为文件指针默认在最后一行,可用seek移动文件指针位置 |
1. r+读写模式
# r+读写模式 f=open('test.txt','r+') res=f.write('000 ') res1=f.read() print(res1) # 原test.txt内容如下: # 123456 # 678 # 789 #print输出读取的内容如下: # 6 # 678 # 789 #现test.txt内容如下: # 000 # 6 # 678 # 789 ##解释说明: #1. r+新写入的内容会覆盖原文件中的内容,写入几个字符,则覆盖几个字符 #2. r+会从文件开头开始进行文件读写,所以每次写入时,都会从一开始(第一行)进行 #3. 换行符相当于两个字符 #4. r+写完后,文件指针会停留在新写入的字符后面,所以在read时,只read新写入字符后面的那些内容 #5. 综上所述,新写入的000 会覆盖原文件中的前5个字符,且read后显示的内容不包含新写入的内容
2. w+写读模式
# w+写读模式 f=open('test.txt','w+') res=f.write('000 ') res1=f.read() print(res1) # 原test.txt内容如下: # 123456 # 678 # 789 #print输出读取的内容如下:#空,能读,但是读不到内容,因为w+先把文件内容清空了 #现test.txt内容如下: # 000 # ##解释说明: #1. w+会先清空然后覆盖原文件内容 #2. w+会先将文件里的所有内容都清空,所以读不到任何内容
3. a+追加读模式
# a+读写模式 f=open('test.txt','a+') res=f.write('000 ') res1=f.read() print(res1) # 原test.txt内容如下: # 123456 # 678 # 789 #print输出读取的内容如下:#空,能读,但读不到内容,因为文件指针默认在最后一行,用seek移动文件指针位置 #现test.txt内容如下: # 123456 # 678 # 78900 # ##解释说明: #1. a+因为文件指针默认在最后一行字符后,所以写入新字符时,新写入的字符会显示在最后 #2. a+能读,但因为文件指针默认在最后一行,所以读不到内容,显示空 #3. a+可以用seek()移动文件指针位置进行文件的读取
3-1:a+中seek()的运用:在读取文件时,可指定下标从而实现从第几位开始读取文件内容;
注:只针对读取文件,写文件还是只能从最后开始写
f=open('test.txt','a+') f.seek(5) #此处的seek不起作用,因为对写文件不起作用 res=f.write('hh ') f.seek(2) #从下标是2的字符开始读取文件 res1=f.read() print(res1) # 原test.txt内容如下: # 123456 # 678 # 789 #print输出读取的内容如下: # 3456 # 678 # 789hh # #现test.txt内容如下: # 123456 # 678 # 789hh #