一、核心功能
‘r’:只读。该文件必须已存在。
‘r+’:可读可写。该文件必须已存在,写为覆盖写(不清空,覆盖与输入等长的部分内容)。
‘rb’:表示以二进制方式读取文件。该文件必须已存在。
‘w’:只写。打开即默认创建一个新文件,如果文件已存在,则覆盖写(即文件内原始数据会被新写入的数据清空后覆盖)。
‘w+’:写读。打开创建新文件并写入数据,如果文件已存在,则覆盖写。
‘wb’:表示以二进制写方式打开,只能写文件, 如果文件不存在,创建该文件;如果文件已存在,则覆盖写。
‘wb+’:表示以二进制写方式打开,读写文件, 如果文件不存在,创建该文件;如果文件已存在,则覆盖写。
‘a’:追加写。若打开的是已有文件则直接对已有文件操作,若打开文件不存在则创建新文件,只能执行写(追加在后面),不能读。
‘a+’:追加读写。打开文件方式与写入方式和’a
'一样,但是可以读。需注意的是你若刚用‘a+
’打开一个文件,一般不能直接读取,因为此时光标已经是文件末尾,除非你把光标移动到初始位置或任意非末尾的位置。(可使用seek()
方法解决这个问题,详细请见下文Model 8 示例)
二、示例解说
Model 1: r —只读模式
注意:test2.txt
必须文件是已存在的。顺便说一下字符编码。因为Windows
操作系统默认字符编码为GBK
,而Python
默认Unicode.utf-8
,如果报错就加上" encoding='utf-8'
",也存在不加写不进内容的情况。
def func3():
f =open("./text2.txt","r+",encoding='utf-8')
try:
print(f.readline()) #打印文件内容首行数据
except:
pass
finally:
f.close()
Model 2: r+ —可读可写模式
def func3():
f =open("./text2.txt","r+",encoding='utf-8')
try:
f.write("today is 15.6.2021") #覆盖原文件同长度字节
f.seek(0) #将光标回到文件头(如要从头到尾读文件内容,文件指针需回到文件头)
print(f.read()) #读取打印文件全部内容
except:
pass
finally:
f.close()
Model 3: rb —以二进制方式读取文件
注意:不能加encoding='utf-8'
,会报错ValueError: binary mode doesn't take an encoding argument
def func3():
f =open("./text2.txt","rb")
try:
print(f.read())
except:
pass
finally:
f.close()
>>>b'hello,world!' #二进制方式返回
Model 4: w —只写模式
def func3():
f =open("./text2.txt","w",encoding='utf-8')
try:
f.write("today is 15.6.2021")
except:
pass
finally:
f.close()
Model 5: w+ —写读模式
def func3():
f =open("./text2.txt","w+",encoding='utf-8')
try:
f.write("today is 15.6.2021")
f.seek(0)
print(f.read())
except:
pass
finally:
f.close()
>>>today is 15.6.2021 #原文件内容清空,写入,读取
Model 6: wb —以二进制方式写文件
注意:
1.不能加encoding='utf-8'
,会报错ValueError: binary mode doesn't take an encoding argument
2.f.write
得加.encode('ascii')
,否则无法写入内容
def func3():
f =open("./text2.txt","wb")
try:
f.write("hello,world!!!".encode('ascii'))
except:
pass
finally:
f.close()
Model 7: a —追加写模式
def func3():
f =open("./text2.txt","a",encoding='utf-8')
try:
f.write("\ntoday is 15.6.2021")
except:
pass
finally:
f.close()
Model 8: a+ —追加读写模式
def func3():
f =open("./text2.txt","a+",encoding='utf-8')
try:
f.write("today is 15.6.2021\n")
f.seek(0)
print(f.read())
except:
pass
finally:
f.close()
>>>
today is 15.6.2021
today is 15.6.2021
三、附加干货
以下是文件操作中常用的一些方法:
print(f.readline())
# 打印一行
print(f.readline(5))
# 打印前5个字符
print(f.tell())
# 打印当前指针位置
print(f.read())
# 读完文件后,指针在最尾处
f.seek(0)
# 如要重头到尾再读,文件指针须先回到文件头(0-文件头,默认值; 1-当前位置; 2-文件尾)
print(f.read())
# 重读文件
print(f.encoding)
# 打印当前使用的字符编码
print(f.name)
# 打印文件名
print(f.flush())
# 刷新
f.truncate()
# 清空文件
f.truncate(12)
# 从头开始,第12个字符后截断并清除
f.close()
# 关闭文件
- End -
转载出处并更正了一些内容:https://www.cnblogs.com/wujiaqing/p/10690265.html