一、文件操作的常用方式
1、文字说明
‘r’:只读,文件必须已存在,不存在则报错,
‘r+’:可读可写,该文件必须已存在,清空源文件内容并写入新的内容,
‘rb’:表示以二进制方式读取文件,该文件必须已存在,
‘w’:只写,打开即默认创建一个新文件,如果文件已存在,则覆盖写,即清空文件内原始数据,从新写入新数据,
‘w+’:只读,打开创建一个新文件,如果文件已经存在,则覆盖写,
‘wb’:表示以二进制方式打开,只能写文件,如果文件不存在,则创建该文件;如果文件已存在,则覆盖写,
‘a’:追加写。若打开的是已有文件则直接对已有文件操作,若打开文件不存在则创建新文件,只能执行写且在最后面,不能读,
‘a+’:追加读写,打开文件方式与写入方式和‘a’一样,但是可以读。需要注意的是你若刚用‘a+’打开一个文件,一般不能直接读取,因为此时光标已经是文件末尾,除非你把光标移动到初始位置或任意非末尾的位置。(可使用seek()方法解决,详细见下文Model8示例)
总结:总共就三大类‘r’(read)、‘w’(write)、‘a’(append),其余的均是一些组合,且‘r’类的必须文件存在才可使用;‘w’类可以有文件,也可以没有,没有时会自动创建;‘a’类在文件没有时也可以创建新文件,这点和‘w’类类似,并且默认指针在内容的最后面。
2、示例说明
示例1:r ---只读模式
注意:test2.txt 必须文件是已存在的。顺便说一下字符编码。因为Windows操作系统默认字符编码为GBK,而Python默认Unicode.utf-8,如果不写“ encoding=‘utf-8' "就会报错。
一开始在自己建立的目录下创建文本文件,文本文件内容为‘123’。
![](https://i-blog.csdnimg.cn/blog_migrate/b97528fe4575104c0e58c1b2777156bd.png)
书写代码:用with方式打开文件,可以在文件读写执行完毕后自动关闭文件,不用手动去添加文件.close()。这也是with方式打开文件的常用写法。
with open(r'E:\python编程练习\文件读写\text.txt', 'r', encoding = 'utf-8') as f:
reader = f.readlines() #用readlines()读取所有文本
print(reader)
![](https://i-blog.csdnimg.cn/blog_migrate/361f05fbe9ed7cd308aaf7833b2d573c.png)
上图为显示结果。
Model 2: r+ ---可读可写模式
file = open(r'E:\python编程练习\文件读写\text.txt', 'r+', encoding = 'utf-8')
file.write('业精于勤') #清空源文件内内容,再写入text.txt文件后面
print(file.seek(0)) #seek(0)代表将光标回到文件头并且返回一个整型数字0,如果要重新从头到尾读一遍,文件指针必须回到文件头,
# 如果没有这行返回光标命令,则最后一行代码不会打印任何东西
print(type(file.seek(0)))
print(file.read()) #读取打印text.txt文件的全部内容
file.close() #关闭文件
![](https://i-blog.csdnimg.cn/blog_migrate/7bcb6b3506db7ebea8d761028683ce14.png)
Model 3: rb ---以二进制方式读取文件
with open(r'E:\python编程练习\文件读写\text.txt', 'rb') as f:
reader = f.readlines() #用readlines()读取所有文本,返回的是二进制
print(reader)
![](https://i-blog.csdnimg.cn/blog_migrate/33d6c11c3ae36481ee574400709168f6.png)
Model 4: w ---只写模式
with open(r'E:\python编程练习\文件读写\text.txt', 'w', encoding = 'utf-8') as f:
writer = f.write('行成于思') #清空原文件内容,再写入新内容
原文件内容
![](https://i-blog.csdnimg.cn/blog_migrate/397a05d5137a4d1f7fb80814fdbac9c6.png)
程序执行后原文件内容
![](https://i-blog.csdnimg.cn/blog_migrate/548a072dbe46bc1b5b943860dc4f2c05.png)
Model 5: w+ ---写读模式
with open(r'E:\python编程练习\文件读写\text.txt', 'w+', encoding = 'utf-8') as f:
writer = f.write('行成于思覆盖') #清空原文件内容,再写入新内容
执行结果
![](https://i-blog.csdnimg.cn/blog_migrate/8237941f6d51599510cacffd4680b0f4.png)
Model 6: wb+ ---以二进制方式读写文件
with open(r'E:\python编程练习\文件读写\text.txt', 'wb+') as f:
writer = f.write('行成于思覆盖'.encode('utf-8')) #需要添加编码方式encode('utf-8')
Model 7: a ---追加写模式
with open(r'E:\python编程练习\文件读写\text.txt', 'a', encoding = 'utf-8') as f:
writer = f.write('行成于思') #在原文后面添加内容
最终结果
![](https://i-blog.csdnimg.cn/blog_migrate/6ec2eb62dff9a36c9e025bcd93e8a6d5.png)
Model 8: a+ ---追加读写模式
with open(r'E:\python编程练习\文件读写\text.txt', 'a+', encoding = 'utf-8') as f:
writer = f.write('行成于思123') #在原文后面添加内容
f.seek(0) #将光标指向文件头
print(f.readline()) #打印文件第一行内容
![](https://i-blog.csdnimg.cn/blog_migrate/fce930c8664ef33bbcfdcf92d9cb27eb.png)