知识补充

  • 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 2022-06-29 19:33  念白SAMA  阅读(44)  评论(0)    收藏  举报