一.模式
模式 | 作用 |
---|---|
r | 只读模式,文件不存在则报错,文件存在时打开文件指针位于开始位置 |
w | 只写模式,文件不存在创建空的新文件,文件存在清空文件指针位于开始位置 |
a | 只追加写模式,文件不存在创建空的新文件,文件存在时指纹跳到末尾 |
r+ | 可读可写,性质与r类型,但可以写 |
w+ | 可读可写,性质与w类似,但可以读 |
a+ | 可读可写,性质与a类型,但可以读 |
x | 只读模式,文件存在会报错,文件不存在会创建 |
1.r模式
r模式:只读模式,文件不存在则报错,文件存在时指针跳到开头开始读
示例代码(1):
需求:用户登录,将用户名密码存到一个txt文件中,拿到用户输入的数据去文件中进行对比,并判断结果
用户数据如下:
代码如下:
user_input = input("请输入用户名:")
password_input = input("请输入密码:")
with open(r'user&password.txt',mode="rt",encoding="UTF-8") as f:
flag = False
for line in f:
lst = line.strip().split(",")
if user_input == lst[0] and password_input == lst[1]:
flag = True
break
if flag:
print("登陆成功")
else:
print("用户名或密码错误")
2.w模式
w模式:只写模式,文件不存在则会创建新的空文件,文件存在则会晴空文件,指针移动到文件开头
示例代码(1):
with open("b.txt",mode="wt",encoding="UTF-8") as f:
f.write("这是第一行数据")
f.write("这是第二行数据")
f.write("这是第三行数据")
#打开文件连续写,新的内容跟在旧内容后边
在文件中数据如下图:
示例代码(2)
with open("b.txt",mode="wt",encoding="UTF-8") as f:
f.write("这是第一行数据\n")
with open("b.txt", mode="wt", encoding="UTF-8") as f:
f.write("这是第二行数据\n")
with open("b.txt", mode="wt", encoding="UTF-8") as f:
f.write("这是第三行数据\n")
#连续打开文件写,只会保留最后一次写的内容
在文件数据如下图:
示例代码(3):
需求:根据用户输入的源文件路径和新文件路径,来复制一份文件
src_file = input("请输入原文件路径")
new_file = input("请输入新文件路径")
with open(r"{}".format(src_file),mode="rb") as f1,\
open(r"{}".format(new_file),mode="wb") as f2:
while True:
ret = f1.read(1024) #一次读1024个字节,防止内存溢出
if not ret:
break
f2.write(ret)
3.a模式
a模式:文件不存在时,创建新文件,文件存在时打开文件指针跳到末尾
示例代码(1):
需求:模仿一个用户注册的功能,获取到用户输入的账号密码,对账号进行对比,如果存在就提示用户已存在,否则创建新用户,将账号密码保存在文件中
user_input = input("请输入用户名:")
password_input = input("请输入密码:")
with open("db.txt",mode="rt",encoding="UTF-8") as f: #db.txt存放着用户账号和密码
flag = False
for line in f:
if line.strip().split(":")[0] == user_input:
print("用户名已存在")
flag = True
break
if not flag: #如果用户不存在,将用户账号密码写入文件
with open("db.txt",mode="at",encoding="UTF-8") as f:
f.write("{}:{}\n".format(user_input,password_input))
4.+模式
1.r+模式测试
with open("m.txt",mode="rt+",encoding="UTF-8") as f:
pass
结果如下:
验证了他与r模式性质相似
2.w+模式测试
with open("a.txt",mode="wt+",encoding="UTF-8") as f:
print(f.read()) #读不到是因为文件被清空了
f.write("哈哈哈") #指针移动到末尾
print(f.read()) #读不到是因为写完文件后指针移动到末尾
结果如下:
什么都没有
3.a+模式测试
with open("a.txt",mode="at+",encoding="UTF-8") as f:
print("---->:",f.read()) #读不到是因为打开文件时指针移动到末尾
f.write("\n哼哼哈嘿\n")
print("---->:",f.read()) #读不到是因为写完文件后指针移动到末尾
结果如下:
5. x模式
with open("c.txt",mode="x",encoding="UTF-8") as f:
f.write("xxx")
文件存在时:
文件不存在时会创建
二.方法和属性
文件操作常用方法:
方法名 | 作用 |
---|---|
f.read(n) | 从文件指针当前位置开始读,不指定n将文件读完,指定n读取指定字节或字符,文件指针移动到末尾 |
f.readline() | 每次读取一行,文件指针移动到下一行行首 |
f.readlines() | 一次性将文件内容全部读取出来,结果是list |
f.readable() | 文件是否可读,结果为bool |
f.write() | 写入指定内容,写入后文件指针移动到末尾 |
f.writelines() | 写入多行内容,需要传一个iterable对象 |
f.writeable() | 文件是否可写,结果为bool |
f.close() | 关闭文件 |
f.flush() | 刷新文件,将内存中的变化同步到硬盘中 |
f.encoding | 文件的解码方式 |
f.closed | 文件是否关闭 |
f.name | 文件路径 |