文本文件
文本文件
- 文件的读写模式
- 文件的操作模式
- 文件操作的诸多方法
文件的读写模式
- 只读模式 ( r ) 一般情况下默认的模式
使用该模式打开文件只能读取内容,不能做其他操作
1. 当使用该模式时,若是文件的路径不存在,则读模式会报错
with open (r'b.txt', 'r', encoding = 'utf-8') as f :
pass # 补全python语法
2. 文件路径存在: r模式会打开文件等待读取文件内容
with open(r'a.txt', 'r', encoding='utf8') as f:
# print(f.read()
f.write('123')
- 只写模式 ( w )
使用该模式打开文件只能写内容,不能做其他操作
1. 使用该模式时,如果文本路径不存在,则 w 模式将会自动创建该文件
with open(r'c.txt', 'w', encoding='utf8') as f:
pass # 补全python语法
2.如果文本路径存在, w 模式将会先清空该文件的内容,然后再等待填写新的内容
with open(r'a.txt', 'w', encoding='utf8') as f:
pass # 补全python语法
- 只追加模式( a )
使用该模式打开文件默认是在末尾追加新的内容,不能做其他操作
当文本路径不存在时,a 模式将自动创建该文件
ith open(r'd.txt', 'a', encoding='utf8') as f:
pass
当文本路径存在时,a 模式不会先清空该文件的内容,而是在文件的末尾添加填写的新内容
with open(r'b.txt', 'a', encoding='utf8') as f:
f.write('干饭人,干饭魂,干饭都是人上人\n')
文件的操作模式
-
文件的操作模式 即控制文件读写内容的模式
有 t 模式和 b 模式
t 模式和 b 模式不能单独使用,必须和 r/w/a 之一结合使用 -
t 模式( 文本模式)
1.t 模式只能操作文本文件
2.t 模式必须指定encoding 参数
3.读写都是以字符串为单位 -
b 模式 (读写都是以二进制为单位)
1.能够操作所有类型的文件
2.不需要指定encoding参数
3.读写都是以bytes为单位 -
b模式对比t模式
1.在操作纯文本文件方面t模式帮我们省去了编码与解码的环节,b模式则需要手动编码与解码,所以此时t模式更为方便
2.针对非文本文件(如图片、视频、音频等)只能使用b模式
文件的诸多操作方法
-
读操作
read() 一次性读取所有内容,执行完该操作后,文件指针会移动到文件末尾,继续读则为空
readline() 只读取一行内容
readlines() 读取每一行内容,存放于列表中
readable() 判断当前文件是否可读 -
写操作
write() 填写文件内容
writelines() 支持填写容器类型(内部可以存放多个数据值的数据类型)多个数据值
writable() 判断当前文件是否可写 -
其他操作
closed # 文件是否关闭
encoding # 如果文件打开模式为b,则没有该属性
flush() # 立刻将文件内容从内存保存到硬盘
今日作业
- 1.编写简易版本的拷贝工具
自己输入想要拷贝的数据路径
自己输入拷贝到哪个地方的目标路径
任何类型数据皆可拷贝
ps: 个别电脑C盘文件由于权限问题可能无法拷贝
换其他盘尝试即可
src_list = input('文件路径:').strip() # 输入原始文件路径
dst_list = input('拷贝到:').strip() # 输入需要拷贝到的文件路径
# 将原石路径读取后写入到内存中保存
with open(r'%s' % src_list, 'rb') as read_f, open(r'%s' % dst_list, 'wb') as write_f:
for info in read_f: # 逐个读取数据
write_f.write(info) # 写入到所拷贝的路径中

- 2.利用文件充当数据库编写用户登录、注册功能
文件名称: userinfo.txt
基础要求:
用户注册功能 >> >: 文件内添加用户数据(用户名、密码等)
用户登录功能 >> >: 读取文件内用户数据做校验
ps: 上述功能只需要实现一次就算过关(单用户)
文件内始终就一个用户信息
拔高要求:
用户可以连续注册
用户可以多账号切换登录(多用户)
文件内有多个用户信息
ps: 思考多用户数据情况下如何组织文件内数据结构较为简单
提示: 本质其实就是昨天作业的第二道题
只不过数据库由数据类型变成文件
f = open('userinfo.txt') # 打开存账号的文件
res = f.read() # 读取文件中的内容
user_list = res.split() # 分割字符串,返回列表
info = {} # 定义一个空字典
for i in user_list:
name = i.split(',')[0]
paw = i.split(',')[1]
info[name] = paw # 循环列表,取出列表中的值存入字典
while True:
print("""
------------用户登录/注册------------
1.登录
2.注册
""")
choice = input('请输入你的选择:').strip()
if choice == '1': # 当输入1 时进入登录界面
print('--------进入登录界面------------')
with open(r'userinfo.txt', 'r', encoding='utf8') as f: # 查看文件信息
name = input('请输入你的用户名:').strip()
paw = input('请输入你的密码:').strip()
register = name + ',' + paw # 按照文件的格式赋值给register
if register in res: # 查看信息是否在文件内
print('登录成功')
else:
print('用户名或密码错误')
f.close()
elif choice == '2':
print('--------------进入注册界面----------------')
with open(r'userinfo.txt', 'a', encoding='utf8') as f: # 输入追加的信息
name = input('请输入用户名:').strip()
paw = input('请输入密码:').strip()
paw1 = input('请再次输入密码:').strip()
if paw != paw1:
print('两次密码不一致!')
elif name == '' or paw == '':
print('用户名密码不能为空!')
elif name in info:
print('用户名已存在')
else:
print('恭喜注册成功!')
f.write('\n' + name + ',' + paw) # 按照这个格式写入文件
f.close()
else:
print('没有此选择对应的程序')


浙公网安备 33010602011771号