09

今日内容总结

文件的读写模式

'''文件读写的三种模式(r  w  a)'''
通用格式:
with open(文件路径,模式,encoding='utf8') as f:
    pass
# 由于路径的填写需要使用斜杠符号 斜杠符号又会和一些字母产生特殊意义 所以使用r隔开
    eg:r'文件路径'
# r     只读模式
    只能读取文件的内容
    1.若文件路径不存在会直接报错
    2.若文件路径存在则正常读取文件
# w     只写模式
    只能写不能看
    1.文件路径不存在会直接创建一个
    2.文件路径若存在则会先清除选中的文件的内容 然后再待编写
# a     追加模式
    在文本末端添加数据
    1.文件路径不存在则会创建一个文件
    2.文件路径存在在文件的末端等待待追加的内容

文件的操作模式

'''操作模式有两种模式(t  b)'''
t   文本模式
   上述提到的三种r w a 全称是 rt wt at
    1.只能操作文本文件
    2.读写是以字符为单位
    3.需要encoding来指定参数 不指定则会使用计算机默认的参数 可能会出现乱码

b   二进制模式(bytes模式)
    rb wb ab
    1.可以操作所有文件格式
    2.读写是以字节(bytes)为单位
    3.不需要encoding来指定参数(计算机认识二进制,没那个必要了)
# 二进制读写与文本模式读写规律一样

文件的其他诸多模式

1.read()
    一次性的读取文件中的所有内容 光标停留在末尾 再次读取则无法获取内容
    括号内填写数字可指定读取多少字符
    # 在读取较大文件的时候一次性的读取会导致内存溢出
2.for循环
    避免了一次性读取导致的内存溢出
3.readline()
    一次只读一行内容
4.readlines()
    一次性读取所有内容 按照行数组成一个列表
5.readable()
    判断文件是否具有读取的能力
6.write()
    写入数据
7.writeable()
	判断文件是否有可被编写的能力
8.writelines()
    接受一个列表将列表的所有数据值写入
9.flush()
	将数据直接写入硬盘保存 (ctrl+s)

文件内光标的移动

格式:
with open(r'a.txt','rb') as f:
    f.seek(0,0)
'''
seek 的使用
    1.seek(offset,whence)
    offset 是光标的位移量
    whence 是模式 :0 1 2
    0 是基于文件开头 文本与二进制均可使用
    1 是基于当前位置 只有二进制可使用
    2 是基于末尾位置 只有二进制可使用
'''

训练

1.编写简易版本的拷贝工具
     自己输入想要拷贝的数据路径 自己输入拷贝到哪个地方的目标路径
     任何类型数据皆可拷贝
     ps:个别电脑C盘文件由于权限问题可能无法拷贝 换其他盘尝试即可
a = input('请输入需要拷贝的文件路径>>>:').strip()
b = input('请输入转移的路径>>>:').strip()
with open(fr'{a}','rb') as c:
    d = str(c.read())
with open(fr'{b}','w',encoding='utf8') as e:
    e.write(d)
    print('拷贝成功')
        
2.利用文件充当数据库编写用户登录、注册功能
  文件名称:userinfo.txt
  基础要求:
  		 用户注册功能>>>:文件内添加用户数据(用户名、密码等)
       用户登录功能>>>:读取文件内用户数据做校验
      ps:上述功能只需要实现一次就算过关(单用户) 文件内始终就一个用户信息
  拔高要求:
       用户可以连续注册
      用户可以多账号切换登录(多用户)  文件内有多个用户信息
      ps:思考多用户数据情况下如何组织文件内数据结构较为简单
    提示:本质其实就是昨天作业的第二道题 只不过数据库由数据类型变成文件
        
while True:
    print('1注册 2登录')
    choice = input('请输入你的选择>>>:')
    if choice == '1':
        name = input('请输入你的用户名>>>:').strip()
        psd = input('请输入你的密码>>>:').strip()
        with open(r'D:\zh\a.txt', 'r', encoding='utf8') as f:
            for line in f:
                real_name, real_pwd = line.split('|')
                if name == real_name:
                    print('用户名重复')
                    break
            else:
                with open(r'D:\zh\a.txt', 'a', encoding='utf8') as b:
                    b.write(f'{name}|{psd}\n')
                    print(f'{name}注册成功')
    elif choice == '2':
        name2 = input('请输入你的用户名>>>:')
        psd1 = input('请输入你的密码>>>:')
        with open(r'D:\zh\a.txt', 'r', encoding='utf8') as c:
            for name_psd in c:
                name1, psd = name_psd.split('|')
                if name2 == name1 and psd.strip('\n') == psd1:
                    print('登入成功')
                    break
            else:
                print('登录失败,用户名或密码错误')
    else:
        print('暂时未有该功能')
posted @ 2022-10-09 15:59  早点早点灬  阅读(331)  评论(0)    收藏  举报