文件
# 控制文件读写内容的模式
# 大前提: tb模式均不能单独使用,必须与r/w/a之一结合使用
# t(默认的):文本模式
# 1. 读写文件都是以字符串为单位的
# 2. 只能针对文本文件
# 3. 必须指定encoding参数
# b:二进制模式:
# 1.读写文件都是以bytes/二进制为单位的
# 2. 可以针对所有文件
# 3 . 一定不能指定encoding参数
# 控制文件读写操作的模式
# r(默认的):只读
# w:只写
# a:只追加写
open(r'C:\Users\凝雨\PycharmProjects\pythonProject\test.txt') # r表示raw string即原生字符串,用来规避\n等转义字符
open('C:/Users/凝雨/PycharmProjects/pythonProject/test.txt') # windows系统可以用/代替
f = open('test.txt', mode='rt', encoding='utf-8') # 同级文件夹下可以用相对路径
print(f) # 文件类型
res = f.read()
print(res)
f.close() # 关闭文件
del f
# 可用用with同时打开多个文件,用逗号分隔开即可
with open('a.txt', 'r') as read_f, open('b.txt', 'w') as write_f:
data = read_f.read()
print(data)
write_f.write(data)
# 在执行完子代码块后,with 会自动执行f.close()
with open('a.txt', 'w') as f:
pass
with open('test.txt', mode='rt', encoding='utf-8') as f:
print('第一次读'.center(10, '*'))
res = f.read()
print(res)
print('第二次读'.center(10, '*'))
res = f.read()
print(res)
# 小练习:实现用户认证功能
inp_name = input('请输入你的名字: ').strip() # strip去除字符串首尾空格
inp_pwd = input('请输入你的密码: ').strip()
with open(r'data_base.txt', mode='r', encoding='utf-8') as f:
for line in f:
# 把用户输入的名字与密码与读出内容做比对
u, p = line.strip('\n').split(':') # strip去除字符串首尾换行
if inp_name == u and inp_pwd == p:
print('登录成功')
break
else:
print('账号名或者密码错误')
# w:只写模式,当文件不存在时会创建文件,当文件存在时会清空文件,文件指针位于开始位置
with open(r'test.txt', mode='w', encoding='utf-8') as f:
f.write('哈哈hhh\n')
# a只追加写模式: 在文件不存在时会创建空文档,文件存在会将文件指针直接移动到文件末尾
with open('c.txt',mode='a',encoding='utf-8') as f:
f.write('44444\n')
f.write('55555\n')
# 强调 w 模式与 a 模式的异同:
# 1 相同点:在打开的文件不关闭的情况下,连续的写入,新写的内容总会跟在前写的内容之后
# 2 不同点:以 a 模式重新打开文件,不会清空原文件内容,会将文件指针直接移动到文件末尾,新写的内容永远写在最后
# 小练习:实现注册功能:
name = input('username>>>: ').strip()
pwd = input('password>>>: ').strip()
with open('db1.txt', mode='a', encoding='utf-8') as f:
info = '%s:%s\n' % (name, pwd)
f.write(info)