编程语言
首页 > 编程语言> > 学习python-Day11

学习python-Day11

作者:互联网

今日内容

一,文件读写模式

补充知识:
	1.with语法支持一次性打开多个文件
		with open(r'a.txt', 'r', encoding = 'utf8') as f1, open(r'b.txt', 'r', encoding='utf8') as f2,...:
	2.pass:补全python语法,但不执行任何操作。
		... 也是,但不推荐使用。
	3.通常情况下英语单词如果加上able表示具有该单词描述能力
		readable:具有读取内容的能力。
		writable:具有填写内容的能力
r	使用该模式的文件打开只能读取内容,不能做其他操作(写)
	1.文件路径不存在时,r模式会报错。
	2.文件路径存在时,人模式会打开文件等待读取文件内容。
w	使用该模式打开的文件只能写内容,不能做其他操作(读)
	1.文件路径不存在时,w模式会自动在该路径下重新创建一个新的文件。
	2.文件路径存在时,w模式会先清空该文件内容,之后等待填写新内容。
a	使用该模式代开文件时默认会在文件末尾处追加新的内容,不能做读操作。
	1.文件路径不存在时,a模式会自动在当前路径创建一个新的文件。
	2.文件路径存在时,a模式不会清空文件内容,只在文件末尾处等待填写新内容。追加的内容直到最大容量及停止追加。

二,文件的操作模式

t	一种文本模式。
	文件操作默认模式
		r---->rt
		w---->wt
		a---->at
	使用条件:
			1.只能操作文本文件
			2.必须加上指定encoding参数。
			3.读写都是以字符串为单位。
b	二进制模式
	模式:
			rb,wb,ab (b不能省略)
	使用条件:
			
			1.能够操作所有类型的文件
			2.不需要指定encoding参数。
			3.读写都是以bytes为单位。

三,文件的操作方法

1.read()	一次性读取文件内容并且光标会停留在文件末尾,继续读则结果为空。
	注意:当文件数据过大时,不推荐一次性读取。但是用for循环可以解决这个问题。
	for line in f:
        print(line)  
	文件对象支持for循环一次只读一行
2.readline()	一次只读一行内容
3.readlines()	按照行的方式读取所有的内容并组织成列表返回,可以读取多行数据。
4.readable()	判断当前文件是否可读,返回为布尔值。
5.writable()	判断当前文件是否可写
6.write()	填写文件内容。
7.writelines()	支持填写容器类型(内部可以存放多个数据值的数据类型)
			元组,列表,字典,集合
8.flush()	将内容中的文件数据立刻刷到硬盘(ctrl+s)

作业

1.编写简易版本的拷贝工具
自己输入想要拷贝的数据路径
自己输入拷贝到哪个地方的目标路径
任何类型数据皆可拷贝
ps: 个别电脑C盘文件由于权限问题可能无法拷贝
换其他盘尝试即可

with open(r'D:\pythonProject\day02\a1.txt', 'r', encoding='utf8') as f1, open(r'D:\pythonProject\day02\a.txt', 'w', encoding='utf8') as f2:
    f2.write(f1.read())

with open(r'D:\pythonProject\day02\a1.txt', 'rb') as f1, open(r'D:\pythonProject\day02\a.txt', 'wb') as f2:
    f2.write(f1.read())

2.利用文件充当数据库编写用户登录、注册功能
文件名称: userinfo.txt
基础要求:
用户注册功能 >> >: 文件内添加用户数据(用户名、密码等)
用户登录功能 >> >: 读取文件内用户数据做校验
ps: 上述功能只需要实现一次就算过关(单用户)
文件内始终就一个用户信息
拔高要求:
用户可以连续注册
用户可以多账号切换登录(多用户)
文件内有多个用户信息
ps: 思考多用户数据情况下如何组织文件内数据结构较为简单
提示: 本质其实就是昨天作业的第二道题
只不过数据库由数据类型变成文件

while True:
    print('''
    ---------------------
           l:用户登录
           r:用户注册
    ---------------------
    ''')
    order = input('请输入功能:')
    if order == 'l':
        # 输入用户名和密码
        username = input('请输入你的用户名>>>:').strip()
        password = input('请输入你的密码>>>:').strip()

        # 打开文件,读取文件每一个数据
        with open(r'userinfo.txt', 'r', encoding='utf') as f2:
            for i in f2:
                # 每次循环都去除里面的换行符
                date = i.strip('\n')
                # 将|去掉,数据是以列表的形式写入文件中
                date1 = date.split('|')
                # 判断用户名和密码是否正确,用索引的形式。
                if username == date1[0]:
                    if password == date1[1]:
                        print(f'{date1[0]},你已成功登录!!!')
                        break
                    else:
                        print('你的密码错误!!!')
                        continue
            else:
                print('登录失败!!')
                continue

    if order == 'r':
        username = input('请输入你的用户名>>>:').strip()
        password = input('请输入你的密码>>>:').strip()
        # 用|将两个变量分隔,方便写入文件中
        date = username + '|' + password
        # 注册--初始化输入用户和密码,将信息写入文件中。
        with open(r'userinfo.txt', 'a', encoding='utf') as f1:
            with open(r'userinfo.txt', 'r', encoding='utf8') as f3:
                #循环f3列表
                for old in f3:
                    #如果数据等于这个数据则用户名会报错
                    if date == old.strip('\n'):
                        print('用户名重复!!')
                        break
                else:
                    date = date + '\n'
                    f1.write(date)
                    print('注册成功!!')

image

标签:文件,读取,encoding,python,模式,学习,Day11,txt,open
来源: https://www.cnblogs.com/bjyxxc/p/16423214.html