pytho day10

读写模式之a模式

# a模式  只追加模式
# 路径不存在:自动创建
with open(r'a.txt','a',encoding='utf8') as f:
   pass
# 路径存在:不会清空文件 在文件末尾添加内容
with open(r'a.txt', 'a', encoding='utf8') as f:
   f.write('\n今天周四了 马上又要放假了 好开心!')
   

"""小总结
我们所学习的r w a读写模式都只能操作文本文件
"""

文件操作方法

# 文件操作方法
# 1.读系列
with open(r'a.txt', 'r', encoding='utf8') as f:
   # print(f.read()) # 一次性读取文件内所有的内容
   # print(f.readline()) # 每次只读文件一行内容
   # print(f.readlines()) # 读取文件所有的内容 组织成列表 每个元素是文件的每行内容
   # print(f.readable()) # 判断当前文件是否具备读的能力


# 2.写系列
with open(r'a.txt','w',encoding='utf8') as f:
   # f.write('克服一切困难 奥利给!') # 往文件内写入文本内容
   # f.write(123) # 写入的内容必须是字符串类型
   # f.writelines(['jason','kevin','tony']) # 可以将列表中多个字符串元素全部写入
   # print(f.writable()) # True
   # print(f.readable()) # False
   f.flush()  # 直接将内存内文件数据刷到硬盘 相当于ctrl+s

文件优化操作

with open(r'a.txt', 'r', encoding='utf8') as f:
   # print(f.read()) # 一次性读取文件内所有的内容
   # print(f.read()) # 一次性读取文件内所有的内容
   # print(f.read()) # 一次性读取文件内所有的内容
   """
  1.一次性读完之后 光标停留在了文件末尾 无法再次读取内容
  2.该方法在读取大文件的时候 可能会造成内存溢出的情况
      解决上述问题的策略就是逐行读取文件内容
  """
   # for line in f: # 文件变量名f支持for循环 相当于一行行读取文件内容
   #     line
   '''以后涉及到多行文件内容的情况一般都是采用for循环读取'''

课堂练习

1.简易版本的注册、登陆功能
普通要求(实现一次即可)
  注册功能
      获取用户名和密码组织成你喜欢的样子写入文件即可
       登陆功能
      获取用户名和密码然后比对是否与文件内用户数据一致

# 注册功能
   # 1.获取用户用户名和密码
   username = input('username>>>:').strip()
   password = input('password>>>:').strip()
   # 2.将用户名和密码组织成一个字符串
   data = '%s|%s' % (username, password)
   # 3.文件操作 写入数据
   with open(r'userinfo.txt', 'w', encoding='utf8') as f:
       f.write(data)
   print('用户:%s 注册成功' % username)

# 登录功能
   # 1.获取用户名和密码(先使用input获取用户输入的数据 然后strip()移除首尾空格 之后赋值给变量名username)
   username = input('username>>>:').strip()
   password = input('password>>>:').strip()
   # 2.获取文件内真实的用户数据
   with open(r'userinfo.txt','r',encoding='utf8') as f:
       # 由于现在文件中只有一行内容 我们干脆直接读取完
       data = f.read()  # 'jason|jason123'
       '''with子代码执行完之后的结果是可以在外面使用的'''
   # 3.切割字符串获取真实的用户名和密码
   res = data.split('|')  # ['jason', 'jason123']
   '''这里也可以直接使用解压赋值的操作 real_name,real_pwd = data.split('|')'''
   # 4.比对数据
   if username == res[0] and password == res[1]:
       print('登录成功')
   else:
       print('用户名或密码错误')

进阶练习

# 多用户注册
# while True:
#     # 1.获取用户用户名和密码
#     username = input('username>>>:').strip()
#     password = input('password>>>:').strip()
#     # 2.将用户名和密码组织成一个字符串
#     data = '%s|%s\n' % (username, password)
#     # 2.1.判断用户名是否已存在
#     with open(r'userinfo.txt', 'r', encoding='utf8') as f1:
#         # 2.2.循环读取每一行用户数据
#         for line in f1:
#             # 2.3.获取每一行数据中的用户名
#             real_name, real_pwd = line.split('|')
#             # 2.4.判断用户名是否一致
#             if username == real_name:
#                 print('用户名已存在')
#                 break
#         else:
#             # 3.文件操作 写入数据
#             with open(r'userinfo.txt', 'a', encoding='utf8') as f:
#                 f.write(data)
#             print('用户:%s 注册成功' % username)


# 多用户登录
# 1.获取用户名和密码(先使用input获取用户输入的数据 然后strip()移除首尾空格 之后赋值给变量名username)
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 2.获取文件内真实的用户数据
with open(r'userinfo.txt', 'r', encoding='utf8') as f:
   for line in f:
       # 3.切割字符串获取真实的用户名和密码
       '''注意密码末尾有\n'''
       real_name, real_pwd = line.split('|')  # ['jason', 'jason123\n']
       # 4.比对用户名和密码是否正确
       if username == real_name and password == real_pwd.strip('\n'):
           print('登录成功')
           break
   else:
       print('用户名或密码错误')

代码整合

while True:
   print("""
  1.用户注册
  2.用户登录
  """)
   choice = input('请输入您想要执行的功能编号>>>:').strip()
   if choice == '1':
       # 1.获取用户用户名和密码
       username = input('username>>>:').strip()
       password = input('password>>>:').strip()
       # 2.将用户名和密码组织成一个字符串
       data = '%s|%s\n' % (username, password)
       # 2.1.判断用户名是否已存在
       with open(r'userinfo.txt', 'r', encoding='utf8') as f1:
           # 2.2.循环读取每一行用户数据
           for line in f1:
               # 2.3.获取每一行数据中的用户名
               real_name, real_pwd = line.split('|')
               # 2.4.判断用户名是否一致
               if username == real_name:
                   print('用户名已存在')
                   break
           else:
               # 3.文件操作 写入数据
               with open(r'userinfo.txt', 'a', encoding='utf8') as f:
                   f.write(data)
               print('用户:%s 注册成功' % username)
   elif choice == '2':
       # 1.获取用户名和密码(先使用input获取用户输入的数据 然后strip()移除首尾空格 之后赋值给变量名username)
       username = input('username>>>:').strip()
       password = input('password>>>:').strip()
       # 2.获取文件内真实的用户数据
       with open(r'userinfo.txt', 'r', encoding='utf8') as f:
           for line in f:
               # 3.切割字符串获取真实的用户名和密码
               '''注意密码末尾有\n'''
               real_name, real_pwd = line.split('|')  # ['jason', 'jason123\n']
               # 4.比对用户名和密码是否正确
               if username == real_name and password == real_pwd.strip('\n'):
                   print('登录成功')
                   break
           else:
               print('用户名或密码错误')
   else:
       print('没有改功能 爱咋滴咋滴!')

文件操作模式

t   文本模式
1.默认的模式
  r w a  >>> rt wt at
   2.该模式所有操作都是以字符串基本单位(文本)
   3.该模式必须要指定encoding参数
   4.该模式只能操作文本文件
   
b   二进制模式
1.该模式可以操作任意类型的文件
   2.该模式所有操作都是以bytes类型(二进制)基本单位
   3.该模式不需要指定encoding参数
  rb wb ab

 

上一篇:遇到--AttributeError: ‘builtin_function_or_method‘ object has no attribute ‘split‘----不要慌!


下一篇:Python strip()方法