文件的读写模式
文件的操作模式
文件操作的诸多方法
简称字母r,全称为rt。
使用该模式打开的文件只能读取内容!!!
使用该模式打开的文件不能做读的操作!!!
敲重点:
(1.)当文件路径不存在,r模式会直接报错处理with open(r'c.txt','r',encoding='utf8')as f: pass D:\Python36\python36.exe "E:/pythonProject/Day10/02 预习.py" Traceback (most recent call last): File "E:/pythonProject/Day10/02 预习.py", line 55, in <module> with open(r'c.txt','r',encoding='utf8')as f: FileNotFoundError: [Errno 2] No such file or directory: 'c.txt' Process finished with exit code 1
(2.)当文件路径存在时,r模式会打开文件等待读取内容
with open(r'a.txt', 'r', encoding='utf8') as f: print(f.read()) D:\Python36\python36.exe "E:/pythonProject/Day10/02 预习.py" 好好学习不要蒙圈 好好听课 不要蒙圈 好好听课 不要蒙圈 好好听课 Process finished with exit code 0
简称字母w,全称为wt。
使用该模式打开的文件只能写内容!!!
使用该模式打开的文件不能做写的操作!!!
敲重点:
(1.)当文件路径不存在,w模式会自动创建该文件with open(r'c.txt','w',encoding='utf8')as f: pass D:\Python36\python36.exe "E:/pythonProject/Day10/02 预习.py" Process finished with exit code 0
(2.)当文件路径存在时,w模式会先清空该文件内容 之后等待填写新内容
with open(r'a.txt', 'w', encoding='utf8') as f: # pass print(f.write('好好学习,天天向上')) D:\Python36\python36.exe "E:/pythonProject/Day10/02 预习.py" 9 Process finished with exit code 0
简称字母a,全称为at。
使用该模式打开的文件默认是在末尾追加新的内容!!!
使用该模式打开的文件不能做读的操作!!!
敲重点:
(1.)当文件路径不存在,w模式会自动创建该文件with open(r'c.txt','a',encoding='utf8')as f: pass D:\Python36\python36.exe "E:/pythonProject/Day10/02 预习.py" Process finished with exit code 0
(2.)当文件路径存在时,a模式不会先清空该文件内容 只在在文件末尾等待填写新内容
with open(r'a.txt', 'a', encoding='utf8') as f: f.write('不要蒙圈 好好听课\n') D:\Python36\python36.exe "E:/pythonProject/Day10/02 预习.py" Process finished with exit code 0
1.with语法支持一次性打开多个文件!!!
with open(r'a.txt', 'r', encoding='utf8') as f1, open(r'b.txt', 'r', encoding='utf8') as f2, open() as f3, open() as f4...:
2.对于补全python语法,不做任何操作,有两种方法:
方法一:with语法结束后pass结束;
方法二:直接加…(不推荐使用!!!)
3.通常情况下英语单词的结尾如果更上了able表示具备该单词描述的能力
eg:
readable 具备读取内容的能力
writable 具备填写内容的能力
模式 | 英文字母 | 分类 | 作用 |
---|---|---|---|
文本模式 | t | rt ;wt ; at | 1.只能操作文本文件;2.必须指定encoding参数;3.读写都是以字符串为单位 |
二进制模式 | b | rb ;wb ;ab | 1.能够操作所有类型的文件 ;2.不需要指定encoding参数;3.读写都是以bytes为单位 |
1.单独列出,敲重点:
read():一次性读取文件内容并且光标会停留在文件末尾,继续读则为空。
当文件数据很大时一般不采用一次性读取。
代码展示:for line in f: print(line) # 文件对象支持for循环,并且依次只读一行
2.其余由列表展示:
文件操作方法 | 作用 |
---|---|
readline() | 一次只读一行内容 |
readlines() | 按照行的方式读取所有的内容并组织成列表返回 |
readable() | 判断当前文件是否可读 |
writable() | 判断当前文件是否可写 |
write() | 填写文件内容 |
writelines() | 支持填写容器类型(内部可以存放多个数据值的数据类型)多个数据值 |
flush() | 将内存中的文件数据立刻刷到硬盘(主动按ctrl+s) |
1.编写简易版本的拷贝工具
自己输入想要拷贝的数据路径 自己输入拷贝到哪个地方的目标路径
任何类型数据皆可拷贝
ps:个别电脑C盘文件由于权限问题可能无法拷贝 换其他盘尝试即可
# 作业一:
url = input('请输入您的文件路径>>>:').strip()
ture_url = input('请输入您想要拷贝的数据路径>>>:').strip()
with open(fr'{url}','rb')as read_f,open(fr'{ture_url}','wb') as write_f:
write_f.write(read_f.read())
print('拷贝成功')
2.利用文件充当数据库编写用户登录、注册功能
文件名称:userinfo.txt
基础要求:
用户注册功能>>>:文件内添加用户数据(用户名、密码等)
用户登录功能>>>:读取文件内用户数据做校验
ps:上述功能只需要实现一次就算过关(单用户) 文件内始终就一个用户信息
拔高要求:
用户可以连续注册
用户可以多账号切换登录(多用户) 文件内有多个用户信息
ps:思考多用户数据情况下如何组织文件内数据结构较为简单
提示:本质其实就是昨天作业的第二道题 只不过数据库由数据类型变成文件
# 作业二:
with open(r'b.txt', 'a', encoding='utf') as f3:
while True:
print("""
1.注册用户信息
2.登录用户
3.退出程序
""")
order = input('请输入您的指令>>>:').strip()
if order == '1':
while True:
username = input('please input your username>>>:').strip()
password = input('please input your password>>>:').strip()
user = '|'.join((username, password))
with open(r'b.txt', 'r',encoding='utf')as f1:
ft = f1.read()
if user in ft:
print('用户名已存在')
continue
else:
with open(r'b.txt', 'a', encoding='utf') as f3:
f3.write(f'{user}\n')
print(f'{username}注册成功!!!')
break
continue
elif order == '2':
while True:
username = input('please input your username>>>:').strip()
password = input('please input your password>>>:').strip()
user = '|'.join((username, password))
with open(r'b.txt', 'r',encoding='utf')as fe:
ft = fe.read()
if user in ft:
print('登录成功')
break
else:
print('用户名或密码错误')
continue
elif order == '3':
print('退出成功')
break
else:
print('请你好好输入!!!')