day09总结
文件处理
什么是文件处理:修改存储的信息
什么是文件:操作系统提供的虚拟单位,用二进制来存储信息
操作文件的流程
- 打开文件
- 修改/读取文件
- 保存文件
- 关闭文件
文件的三种打开方式和两种模式
- r 只读不可写
- w 覆盖写
- a 追加写
t模式,针对文本
b模式,针对二进制
绝对路径和相对路径
绝对路径
从盘符开始一直到文件的位置
相对路径
执行文件的文件夹下的文件名,执行文件和打开文件属于同一文件夹下
with管理文件上下文
with提供一个自动关闭文件的功能(解除了操作系统的占用)
文件的高级应用
仅作了解
- 可读可写 r+(光标在文件头部,覆盖后面的字符)
- 可读可写 w+ (和w没任何区别)
- 可写可读 a+ (默认光标在尾部)
移动光标的位置
seek
with open('test.py', 'rb') as fr:
fr.seek(5) # 移动了3个字节,一个中文,默认从开头开始
print(fr.read())
whence
规定只有0,1,2三种模式,0相当于从文件头开始,1相当于文件所在位置,2相当于从文件尾开始
tell
告诉你当前的位置
with open('test.py', 'rb') as fr:
fr.seek(3, 0)
print(fr.tell())
truncate:截断
with open('test.py', 'ab') as fa:
fa.truncate(2)
移动光标(以字符为单位)
read
with open('test.py', 'r', encoding='utf8') as fr:
print(fr.read(3)) # n表示n个字符,不加默认读取所有 # 中文和英文都属于一个字符
登录注册
# 注册
count = 0
while count < 3:
username_inp = input('请输入你的用户名:')
pwd_inp = input('请输入你的密码:')
re_pwd_inp = input('请在此输入你的密码:')
if not pwd_inp == re_pwd_inp:
print('两次密码输入不一致')
count += 1
continue
with open('user_info.txt', 'a', encoding='utf8') as fa:
fa.write(f'{username_inp}:{pwd_inp}\n') # :表示用户名和密码的分割;|用户和用户之间的分割
fa.flush()
break
# 登录
username_inp = input('请输入你的用户名:')
pwd_inp = input('请输入你的密码:')
with open('user_info.txt', 'r', encoding='utf8') as fr:
for user_info in fr:
username, pwd = user_info.split(':')
if username.strip() == username_inp and pwd.strip() == pwd_inp: # strip可以去掉两端的换行符
print('登录成功')
break
# else:
# continue # continue一般不写在最后一行
else:
print('登录失败')
# 一个项目从来都不会在知识点难倒你, 只会在逻辑方面难倒你(敲少了)
文件修改
文件没有修改一说,只有覆盖
可以同时打开多个文件
with open('test.py', 'r', encoding='utf8') as fr, \
open('test_swap.py', 'w', encoding='utf8') as fw:
data = fr.read()