今日内容总结
文件的读写模式
'''文件读写的三种模式(r w a)'''
通用格式:
with open(文件路径,模式,encoding='utf8') as f:
pass
# 由于路径的填写需要使用斜杠符号 斜杠符号又会和一些字母产生特殊意义 所以使用r隔开
eg:r'文件路径'
# r 只读模式
只能读取文件的内容
1.若文件路径不存在会直接报错
2.若文件路径存在则正常读取文件
# w 只写模式
只能写不能看
1.文件路径不存在会直接创建一个
2.文件路径若存在则会先清除选中的文件的内容 然后再待编写
# a 追加模式
在文本末端添加数据
1.文件路径不存在则会创建一个文件
2.文件路径存在在文件的末端等待待追加的内容
文件的操作模式
'''操作模式有两种模式(t b)'''
t 文本模式
上述提到的三种r w a 全称是 rt wt at
1.只能操作文本文件
2.读写是以字符为单位
3.需要encoding来指定参数 不指定则会使用计算机默认的参数 可能会出现乱码
b 二进制模式(bytes模式)
rb wb ab
1.可以操作所有文件格式
2.读写是以字节(bytes)为单位
3.不需要encoding来指定参数(计算机认识二进制,没那个必要了)
# 二进制读写与文本模式读写规律一样
文件的其他诸多模式
1.read()
一次性的读取文件中的所有内容 光标停留在末尾 再次读取则无法获取内容
括号内填写数字可指定读取多少字符
# 在读取较大文件的时候一次性的读取会导致内存溢出
2.for循环
避免了一次性读取导致的内存溢出
3.readline()
一次只读一行内容
4.readlines()
一次性读取所有内容 按照行数组成一个列表
5.readable()
判断文件是否具有读取的能力
6.write()
写入数据
7.writeable()
判断文件是否有可被编写的能力
8.writelines()
接受一个列表将列表的所有数据值写入
9.flush()
将数据直接写入硬盘保存 (ctrl+s)
文件内光标的移动
格式:
with open(r'a.txt','rb') as f:
f.seek(0,0)
'''
seek 的使用
1.seek(offset,whence)
offset 是光标的位移量
whence 是模式 :0 1 2
0 是基于文件开头 文本与二进制均可使用
1 是基于当前位置 只有二进制可使用
2 是基于末尾位置 只有二进制可使用
'''
训练
1.编写简易版本的拷贝工具
自己输入想要拷贝的数据路径 自己输入拷贝到哪个地方的目标路径
任何类型数据皆可拷贝
ps:个别电脑C盘文件由于权限问题可能无法拷贝 换其他盘尝试即可
a = input('请输入需要拷贝的文件路径>>>:').strip()
b = input('请输入转移的路径>>>:').strip()
with open(fr'{a}','rb') as c:
d = str(c.read())
with open(fr'{b}','w',encoding='utf8') as e:
e.write(d)
print('拷贝成功')
2.利用文件充当数据库编写用户登录、注册功能
文件名称:userinfo.txt
基础要求:
用户注册功能>>>:文件内添加用户数据(用户名、密码等)
用户登录功能>>>:读取文件内用户数据做校验
ps:上述功能只需要实现一次就算过关(单用户) 文件内始终就一个用户信息
拔高要求:
用户可以连续注册
用户可以多账号切换登录(多用户) 文件内有多个用户信息
ps:思考多用户数据情况下如何组织文件内数据结构较为简单
提示:本质其实就是昨天作业的第二道题 只不过数据库由数据类型变成文件
name = input('请输入你的用户名>>>:').strip()
psd = input('请输入你的密码>>>:').strip()
with open(r'D:\zh\a.txt', 'r', encoding='utf8') as f:
for line in f:
real_name, real_pwd = line.split('|')
if name == real_name:
print('用户名重复')
break
else:
with open(r'D:\zh\a.txt', 'a', encoding='utf8') as b:
b.write(f'{name}|{psd}\n')
print(f'{name}注册成功')
标签:文件,路径,读取,09,模式,open,name
From: https://www.cnblogs.com/xiaochenxiangchangpang/p/16772465.html