文件的基本操作
# 三步骤
1. 打开文件
2. 操作文件
3. 关闭文件
关键字:open
# f=open(r'a.txt', 'r', encoding='utf-8')
# f = open(r'a.txt', mode='r', encoding='utf-8')
# print(f) # 操作系统打开的文件
#
# # 操作文件:读、写
# res = f.read()
# print(res)
#
# # 关闭文件:释放资源的
# f.close()
# 方式2:
# with上下文管理器
# with open('a.txt', 'r', encoding='utf8') as f:
# print(f.read())
# 面向对象中会讲原理:先死后活
文件的读写模式
r:read(读)
w:write(写)
a:append(追加写)
# 读模式
# 1. 路径不存在,直接保存
# with open('a.txt', 'r', encoding='utf8') as f:
# pass
# 2. 路径存在
# with open('a.txt', 'r', encoding='utf8') as f:
# print(f.read())
# 写模式
# 1. 路径不存在的, 会自定创建出来文件
# with open('a.txt', 'w', encoding='utf8') as f:
# pass
'''我们真正的代码以后是要运行在Linux系统里面去的,服务器:一台计算机,Linux系统(centos、Redhat等),去阿里云或者腾讯云上去买.'''
# 2. 路径存在
# 把文件内的原本数据情况掉,从新写入,覆盖!!!
# w模式很危险,
# with open('a.txt', 'w', encoding='utf8') as f:
# # f.write('hello big baby!')
# f.write(str(123)) # 写文件的数据类型必须是字符串类型,和字节类型,其他类型都不能直接写入,
# 3. 追加模式
# 3.1 路径不存在,会自动创建文件出来
# with open('a.txt', 'a', encoding='utf8') as f1:
# # f1.write('hello baby!')
# pass
# 路径存在,在文件的原来数据后面继续追加新的内容
with open('a.txt', 'a', encoding='utf8') as f1:
f1.write('hello baby!\n')
文件的操作方法
1. 读系列
# 1. 读系列
with open('a.txt', 'r', encoding='utf8') as f:
# print(f.read())
# 一次读取文件的一行内容,一行一行读取
# print(f.readline()) # hello worldhello baby!hello baby!
# print(f.readlines()) # ['hello world\n', 'hello baby!\n', 'hello baby!\n', 'hello baby!\n']
# 判断文件是否可读
print(f.readable()) # True
2. 写系列
# 2. 写系列
with open('a.txt', 'w', encoding='utf8') as f:
# f.write('hello baby')
# f.write(str(123)) # 只能写字符串
# print(f.writable()) # True
# print(f.readable()) # False
f.writelines(['hello\n', 'world\n', 'kevin', 'jack'])
文件的读操作优化
with open('a.txt', 'r', encoding='utf8') as f:
'''
read方法它是一次性读取文件的所有内容,所以,当文件内容非常大的时候,有可能会造成内存溢出
我们不允许内存溢出的情况出现,但是当文件内容非常小的时候,无所谓了,
针对上述出现的问题,如何解决呢?
'''
# print(f.read()) # 一次性把文件中的内容读取完毕
# print(f.read())
# print(f.read())
# print(f.read())
# 变量f它值支持for循环的
for line in f:
print(line) # for循环就是一行一行的读取内容的
'''所以,以后读文件的时候,如果觉得文件很大,我们就是要for循环一行一行的读取'''
课堂练习
1. 简易版本的注册与登录功能:用户的数据要保存在文件里面
# 只注册一次
'''把用户的用户名和密码给保存起来,登录就是使用用户注册时候保存的用户名和密码进行比较'''
# 1. 注册功能:数据需要保存在文件里
# 1.1 让用户输入用户名和密码
username = input('请输入你的用户名>>>:').strip()
password = input('请输入你的密码>>>:').strip()
# 2. 把用户名和密码保存到文件里
res = '%s|%s' % (username, password)
# format
with open('userinfo.txt', 'w', encoding='utf8') as f:
f.write(res)
print('%s:注册成功' % username)
2. 简易版本的登录功能
# 2. 简易版本的登录功能
# 2.1 让用户输入用户名和密码
username = input('请输入你的用户名:').strip()
password = input('请输入你的密码:').strip()
# 3. 先读取文件,然后从文件中获取真实的用户名和密码
with open('userinfo.txt', 'r', encoding='utf8') as f:
data = f.read() # tank|123
# 4. 处理字符串,处理成列表的形式,切分
res = data.split('|') # res: ['tank', '123']
# real_username, real_password = data.split('|') # res: ['tank', '123']
# 5. 比较用户名和密码是否正确
if username == res[0] and password == res[1]:
print('登录成功')
else:
print('用户名或者密码错误')
多用户注册和多用户下的登录功能
# 多用户注册功能:
while True:
username = input('请输入你的用户名>>>:').strip()
password = input('请输入你的密码>>>:').strip()
# 3. 验证用户名是否已经存在
with open('userinfo.txt', 'r', encoding='utf8') as f1:
for line in f1:
# line: kevin|123
if username == line.split('|')[0]:
print('用户名已经存在')
break
else:
# 2. 把用户名和密码保存到文件里
res = '%s|%s\n' % (username, password)
# format
with open('userinfo.txt', 'a', encoding='utf8') as f:
f.write(res)
print('%s:注册成功' % username)
# 2. 多用户下的登录功能
# 多用户下的登录功能
# 1. 让用户输入用户名和密码
username = input('请输入你的用户名:').strip()
password = input('请输入你的密码:').strip()
# 2. 从文件里读取用户名和密码
with open('userinfo.txt', 'r', encoding='utf8') as f:
for line in f:
# line: jason|123
data=line.split('|') # ['kevin', '123\n']
# real_username, real_password = line.split('|') # ['kevin', '123\n']
# real_password.strip('\n')
# 判断用户名和密码
if username == data[0] and password == data[1].strip('\n'):
print('登陆成功')
break
else:
print('用户名和密码错误')
代码整合
#### 代码整合:
while True:
print("""
1. 注册功能
2. 登录功能
""")
choice = input('请输入你要执行的序号:').strip()
if not choice.isdigit():
print('请好好输入,我们没有这个功能')
continue
# 验证序号在1、2范围之内
if choice == '1':
# 注册功能
while True:
username = input('请输入你的用户名>>>:').strip()
password = input('请输入你的密码>>>:').strip()
# 3. 验证用户名是否已经存在
with open('userinfo.txt', 'r', encoding='utf8') as f1:
for line in f1:
# line: kevin|123
if username == line.split('|')[0]:
print('用户名已经存在')
break
else:
# 2. 把用户名和密码保存到文件里
res = '%s|%s\n' % (username, password)
# format
with open('userinfo.txt', 'a', encoding='utf8') as f:
f.write(res)
print('%s:注册成功' % username)
elif choice == '2':
# 登录功能
username = input('请输入你的用户名:').strip()
password = input('请输入你的密码:').strip()
# 2. 从文件里读取用户名和密码
with open('userinfo.txt', 'r', encoding='utf8') as f:
for line in f:
# line: jason|123
data=line.split('|') # ['kevin', '123\n']
# real_username, real_password = line.split('|') # ['kevin', '123\n']
# real_password.strip('\n')
# 判断用户名和密码
if username == data[0] and password == data[1].strip('\n'):
print('登陆成功')
break
else:
print('用户名和密码错误')
main.py(主程序)
import register
import login
import logout
while True:
choice = input("请选择操作:1.注册 2.登录 3.退出\n")
if choice == "1":
register.register()
elif choice == "2":
if login.login():
while True:
choice2 = input("请选择操作:1.注销 2.退出登录\n")
if choice2 == "1":
logout.logout()
break
elif choice2 == "2":
break
elif choice == "3":
break
else:
print("输入有误,请重新输入!")
文件的操作模式
t模式:text文本
r >>> rt
w >>> wt
a >>> at
"""
1. 它是以字符串位基本单位
2. 它只能操作字符串形式
3. encoding参数必须写
"""
b模式:bytes二进制模式
r >>> rb
w >>> wb
a >>> ab
"""
1. b不能省略,必须写 rb
2. 它可以操作任意的数据类型:视频、音频、图片等都可以
3. encoding参数必须不能写
4. 它的数据以字节为单位了
"""
标签:username,文件,用户名,encoding,主题,print,操作,txt,open
From: https://www.cnblogs.com/huangchunfang/p/17560390.html