知识补充
- 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...:
-
补全python语法,但是不执行任何操作
- pass 补全语法结构,本身没有任何功能(推荐使用)
- ... 补全语法结果,本身没有任何功能(不推荐使用)
-
英语单词结尾+able表示具备该单词描述的能力
- readable:具备读取内容的能力
- writable:具备填写内容的能力
文件读写模式
r模式
- r:只能读不能写(只读模式)
# 文件路径不存在: r模式直接报错
with open(r'c.txt', 'r', encoding='utf8') as f:
pass
# 文件路径存在: r模式会打开文件等待读取文件内容
with open(r'a.txt', 'r', encoding='utf8') as f:
# print(f.read())
f.write('123')
w模式
- w:只能写不能读(只写模式)
- 在文件不关闭的情况下,连续的写入,后写的内容一定跟在前写内容的后面
- 如果重新以w模式打开文件,则会清空文件内容
# 文件路径不存在: w模式会自动创建该文件
with open(r'c.txt', 'w', encoding='utf8') as f:
pass
# 文件路径存在: w模式会先清空该文件内容 之后等待填写新内容
with open(r'a.txt', 'w', encoding='utf8') as f:
pass
a模式
- a:在文件末尾添加内容(只追加模式)
# 文件路径不存在: a模式会自动创建该文件
with open(r'd.txt', 'a', encoding='utf8') as f:
pass
# 文件路径存在: a模式不会先清空该文件内容 只在在文件末尾等待填写新内容
with open(r'b.txt', 'a', encoding='utf8') as f:
f.write('阿巴阿巴\n')
+模式
- r+/w+/a+:可读可写
- 在平时工作中,我们只单纯使用r/w/a,要么只读,要么只写,一般不用可读可写的模式
w模式和a模式异同
- 相同点:在打开的文件不关闭的情况下,连续的写入,新写的内容总会跟在前写的内容之后
- 以a模式重新打开文件,不会清空原文件内容,会将文件指针直接移动到文件末尾,新写的内容永远写在最后
文件操作模式
t模式
- 文本模式:文件操作的默认模式
r rt
w wt
a at - 只能操作文本文件
- 必须要指定encoding参数
- 读写都是以字符串为单位
b模式
- 二进制模式:可以操作任意类型的文件
r rb 不能省略b
w wb 不能省略b
a ab 不能省略b - 能够操作所有类型的文件
- 不需要指定encoding参数
- 读写都是以bytes为单位
b模式对比t模式
- 纯文本文件:t模式省去编码和解码的环节,b模式需要手动编码和解码,t模式更方便
- 非文本文件(图片、视频、音频):只能使用b模式
- t/b模式都不可以单独使用,必须与r/w/a之一结合使用
文件的诸多操作方法
-
read()方法:读取所有内容
- 执行完读取内容之后,光标在文件末尾,继续读取没有内容
- 当文件内容特别大的时候,容易造成内存溢出(满了),不推荐一次性读取
-
readline()方法:一次只读取一行内容,光标移动到第二行首部
-
readlines()方法:读取每一行内容,存放于列表中
-
readable()方法:判断当前文件是否可读
-
write()方法:填写文件内容(字符串或者bytes类型)
-
writeable()方法:判断当前是否可写
-
writelines()方法:支持填写内容容器类型(内部可以存放多个数据值的数据类型)多个数据值
-
flush方法:将内存中的文件数据立刻刷到硬盘(相当于主动按Ctrl+s)
作业
1.编写简易版本的拷贝工具
自己输入想要拷贝的数据路径 自己输入拷贝到哪个地方的目标路径
任何类型数据皆可拷贝
ps:个别电脑C盘文件由于权限问题可能无法拷贝 换其他盘尝试即可
copy_path = input('请输入想要拷贝的文件路径:')
target_path = input('请输入想要拷贝的目标路径:')
with open(fr'{copy_path}', 'rb') as f1, open(fr'{target_path}', 'wb') as f2:
f2.write(f1.read())
2.利用文件充当数据库编写用户登录、注册功能
文件名称:userinfo.txt
基础要求:
用户注册功能>>>:文件内添加用户数据(用户名、密码等)
用户登录功能>>>:读取文件内用户数据做校验
ps:上述功能只需要实现一次就算过关(单用户) 文件内始终就一个用户信息
拔高要求:
用户可以连续注册
用户可以多账号切换登录(多用户) 文件内有多个用户信息
ps:思考多用户数据情况下如何组织文件内数据结构较为简单
提示:本质其实就是昨天作业的第二道题 只不过数据库由数据类型变成文件
print('----注册用户----')
user_name = input('请输入用户名:').strip()
user_pwd = input('请输入密码:').strip()
with open(r'userinfo.txt', 'w', encoding='utf8') as f:
data = f.write(f'{user_name}|{user_pwd}')
print('注册成功')
print('----开始登录----')
user_name = input('请输入用户名:').strip()
user_pwd = input('请输入密码:').strip()
with open(r'userinfo.txt', 'r', encoding='utf8') as f:
data = f.read()
inp_name, inp_pwd = data.split('|')
if inp_name == user_name and inp_pwd == user_pwd:
print('用户登录成功')
else:
print('用户名或密码错误,用户登录失败')
posted on
浙公网安备 33010602011771号