今日内容
补充知识: 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('注册成功!!')