文本文件

文本文件

  • 文件的读写模式
  • 文件的操作模式
  • 文件操作的诸多方法

文件的读写模式

  • 只读模式 ( 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)       # 写入到所拷贝的路径中

image

  • 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('没有此选择对应的程序')

image

posted @ 2022-06-29 20:37  Nirvana*  阅读(156)  评论(0)    收藏  举报