今日内容
一,文件读写模式
补充知识:
1.with语法支持一次性打开多个文件
with open(r'a.txt', 'r', encoding = 'utf8') as f1, open(r'b.txt', 'r', encoding='utf8') as f2,...:
2.pass:补全python语法,但不执行任何操作。
... 也是,但不推荐使用。
3.通常情况下英语单词如果加上able表示具有该单词描述能力
readable:具有读取内容的能力。
writable:具有填写内容的能力
r 使用该模式的文件打开只能读取内容,不能做其他操作(写)
1.文件路径不存在时,r模式会报错。
2.文件路径存在时,人模式会打开文件等待读取文件内容。
w 使用该模式打开的文件只能写内容,不能做其他操作(读)
1.文件路径不存在时,w模式会自动在该路径下重新创建一个新的文件。
2.文件路径存在时,w模式会先清空该文件内容,之后等待填写新内容。
a 使用该模式代开文件时默认会在文件末尾处追加新的内容,不能做读操作。
1.文件路径不存在时,a模式会自动在当前路径创建一个新的文件。
2.文件路径存在时,a模式不会清空文件内容,只在文件末尾处等待填写新内容。追加的内容直到最大容量及停止追加。
二,文件的操作模式
t 一种文本模式。
文件操作默认模式
r---->rt
w---->wt
a---->at
使用条件:
1.只能操作文本文件
2.必须加上指定encoding参数。
3.读写都是以字符串为单位。
b 二进制模式
模式:
rb,wb,ab (b不能省略)
使用条件:
1.能够操作所有类型的文件
2.不需要指定encoding参数。
3.读写都是以bytes为单位。
三,文件的操作方法
1.read() 一次性读取文件内容并且光标会停留在文件末尾,继续读则结果为空。
注意:当文件数据过大时,不推荐一次性读取。但是用for循环可以解决这个问题。
for line in f:
print(line)
文件对象支持for循环一次只读一行
2.readline() 一次只读一行内容
3.readlines() 按照行的方式读取所有的内容并组织成列表返回,可以读取多行数据。
4.readable() 判断当前文件是否可读,返回为布尔值。
5.writable() 判断当前文件是否可写
6.write() 填写文件内容。
7.writelines() 支持填写容器类型(内部可以存放多个数据值的数据类型)
元组,列表,字典,集合
8.flush() 将内容中的文件数据立刻刷到硬盘(ctrl+s)
作业
1.编写简易版本的拷贝工具
自己输入想要拷贝的数据路径
自己输入拷贝到哪个地方的目标路径
任何类型数据皆可拷贝
ps: 个别电脑C盘文件由于权限问题可能无法拷贝
换其他盘尝试即可
with open(r'D:/pythonProject/day02/a1.txt', 'r', encoding='utf8') as f1, open(r'D:/pythonProject/day02/a.txt', 'w', encoding='utf8') as f2:
f2.write(f1.read())
with open(r'D:/pythonProject/day02/a1.txt', 'rb') as f1, open(r'D:/pythonProject/day02/a.txt', 'wb') as f2:
f2.write(f1.read())
2.利用文件充当数据库编写用户登录、注册功能
文件名称: userinfo.txt
基础要求:
用户注册功能 >> >: 文件内添加用户数据(用户名、密码等)
用户登录功能 >> >: 读取文件内用户数据做校验
ps: 上述功能只需要实现一次就算过关(单用户)
文件内始终就一个用户信息
拔高要求:
用户可以连续注册
用户可以多账号切换登录(多用户)
文件内有多个用户信息
ps: 思考多用户数据情况下如何组织文件内数据结构较为简单
提示: 本质其实就是昨天作业的第二道题
只不过数据库由数据类型变成文件
while True:
print('''
---------------------
l:用户登录
r:用户注册
---------------------
''')
order = input('请输入功能:')
if order == 'l':
# 输入用户名和密码
username = input('请输入你的用户名>>>:').strip()
password = input('请输入你的密码>>>:').strip()
# 打开文件,读取文件每一个数据
with open(r'userinfo.txt', 'r', encoding='utf') as f2:
for i in f2:
# 每次循环都去除里面的换行符
date = i.strip('/n')
# 将|去掉,数据是以列表的形式写入文件中
date1 = date.split('|')
# 判断用户名和密码是否正确,用索引的形式。
if username == date1[0]:
if password == date1[1]:
print(f'{date1[0]},你已成功登录!!!')
break
else:
print('你的密码错误!!!')
continue
else:
print('登录失败!!')
continue
if order == 'r':
username = input('请输入你的用户名>>>:').strip()
password = input('请输入你的密码>>>:').strip()
# 用|将两个变量分隔,方便写入文件中
date = username + '|' + password
# 注册--初始化输入用户和密码,将信息写入文件中。
with open(r'userinfo.txt', 'a', encoding='utf') as f1:
with open(r'userinfo.txt', 'r', encoding='utf8') as f3:
#循环f3列表
for old in f3:
#如果数据等于这个数据则用户名会报错
if date == old.strip('/n'):
print('用户名重复!!')
break
else:
date = date + '/n'
f1.write(date)
print('注册成功!!')
原创文章,作者:,如若转载,请注明出处:https://blog.ytso.com/272256.html