文件操作

今日内容

文件操作简介

文件操作:

通过编写代码自动操作文件读写

什么是文件:

打开文件,双击文件图标是从硬盘加载数据带内存

保存文件,就是将内存中的数据刷到硬盘

PS:文件实际就是操作系统暴露给用户操作计算机硬盘的快捷方式之一

打开文件的俩种方式

方式一:

open(文件路劲,读写模式,字符编码)

方式二:

with open() as 变量名:
	子代码运行结束之后自动调用close()方法
'''
1.with语法支持一次性打开多个文件,with open() as 变量名,open() as 变量名,open() as 变量名...:
2.python的补全语法,但是实际不执行任何操作,只是放在那里,补充语法
	其中有:  pass	推荐使用
			...,  不推荐使用
'''

文件路劲注意事项:可能存在特殊含义(字母与撬棍的组合),在字符串的前面加字母r即可取消特殊含义

文件读写模式

r-----只读模式(默认模式):

使用该模式打开的文件只能读取内容 不能写、追加的其他操作

# 文件路径不存在: r模式直接报错
# with open(r'aaa.txt', 'r', encoding='utf8') as f:
#     pass
# 文件路径存在: r模式会打开文件等待读取文件内容
with open(r'aaa.txt', 'r', encoding='utf8') as f:
    print(f.read())
    # f.write('123')

image-20220629163804338

如果在只读模式下想要执行写的操作,文件不能正常的运行,not writable指的是不能够进行些的操作 ,able结尾的就是指能不能具备它前面单词的操作

w----只写模式:

使用该模式打开的文件只能写内容,不能读取

# 文件路径不存在: w模式会自动创建该文件
# with open(r'aaa.txt', 'w', encoding='utf8') as f:
#     pass
# 文件路径存在: w模式会清除原来文件的内容,之后等待填写新的内容
with open(r'aaa.txt', 'w', encoding='utf8') as f:
    pass

a----只追加模式:

使用该模式打开的文件默认是在末尾追加新的内容,不能做其他操作(读)

# 文件路径不存在: a模式会自动创建该文件
# with open(a'aaa.txt', 'a', encoding='utf8') as f:
#     pass
# 文件路径存在: a模式不会清除原来文件的内容,在文件末尾等待写入新内容
with open(r'aaa.txt', 'a', encoding='utf8') as f:
    pass

文件操作模式

t----文本模式(文件操作的默认模式)

注意:只能操作文本文件,文档类型的,不能操作图片、音频等。

​	必须指定encoding参数

​	读写都是以字符串为单位

b----二进制模式

注意:用这个模式的时候必须自己指定不能省略,rb、wb、ab

​	能够操作所有类型的文件

​	不需要指定encoding参数

​	读写都是以bytes为单位

拷贝功能

# 文本模式copy文件,只能copy文本文件
with open(r'aaa.txt', 'r', encoding='utf8') as f:
    data = f.read()
with open(r'bbb.txt', 'w', encoding='utf8') as f:
    f.write(data)
# 使用二进制模式可以copy任何文件
with open(r'111.jpg', 'rb') as read_f, open(r'222.jpg', 'wb') as write_f:
    # data = read_f.read()
    # write_f.write(data)
    write_f.write(read_f.read())

文件的诸多操作方法

通过.可以提示好多方法

'''
文件对象支持for循环一次只读一行
每次循环只读一行,没有任何绑定,每次执行完就会被垃圾回收装置回收,不会浪费内存
'''
with open(r'aaa.txt', 'r', encoding='utf8') as f:
    for i in f:
        print(i)
        print('..........')
    ...

'''
理论上会出现俩次文本内的信息
一次性读取文件内容的时候光标会停留在文件末尾,继续读则为空
'''
with open(r'aaa.txt', 'r', encoding='utf8') as f:
    data = f.read()
    print(data)
    data1 = f.read()
    print(data1)
'''
.readline()一次只能读一行内容
'''
with open(r'aaa.txt', 'r', encoding='utf8') as f:
    data = f.readline()
    print(data)
    data1 = f.readline()
    print(data1)
'''
.readlines()按照行的方式读取所有内容并组织成列表返回

'''
with open(r'aaa.txt', 'r', encoding='utf8') as f:
    data = f.readlines()
    print(data)
'''
.readable()判断当前文件是否可读
'''
with open(r'aaa.txt', 'r', encoding='utf8') as f:
    data = f.readable()
    print(data)
'''
.writable()判断当前文件是否可写
'''
with open(r'aaa.txt', 'r', encoding='utf8') as f:
    data = f.writable()
    print(data)
'''
.write()每次执行都会清空内容
'''
with open(r'aaa.txt', 'w', encoding='utf8') as f:
    f.write('要吃中午饭了')
'''
.writelines()支持填写容器类型(内部有多个数据值的类型)
'''
'''
.flush()将内存中的文件数据立即刷到硬盘,主动按ctrl+s
'''

课后作业:

1.编写简易版本的拷贝工具
	自己输入想要拷贝的数据路径 自己输入拷贝到哪个地方的目标路径
	任何类型数据皆可拷贝
	ps:个别电脑C盘文件由于权限问题可能无法拷贝 换其他盘尝试即可
with open(r'D:\aaa.txt','rb') as read_f, open(r'D:\bbb.txt','wb') as write_f:
    write_f.write(read_f.read())
2.利用文件充当数据库编写用户登录、注册功能
	文件名称:userinfo.txt
	基础要求:
		用户注册功能>>>:文件内添加用户数据(用户名、密码等)
       用户登录功能>>>:读取文件内用户数据做校验
      ps:上述功能只需要实现一次就算过关(单用户) 文件内始终就一个用户信息
 	拔高要求:
       用户可以连续注册
   		用户可以多账号切换登录(多用户)  文件内有多个用户信息
      ps:思考多用户数据情况下如何组织文件内数据结构较为简单
   	提示:本质其实就是昨天作业的第二道题 只不过数据库由数据类型变成文件
# 2.
# 利用文件充当数据库编写用户登录、注册功能
# 文件名称: userinfo.txt
# 基础要求:
# 用户注册功能 >> >: 文件内添加用户数据(用户名、密码等)
# 用户登录功能 >> >: 读取文件内用户数据做校验
# ps: 上述功能只需要实现一次就算过关(单用户)
# 文件内始终就一个用户信息
username = input('输入用户名:').strip()
password = input('输入密码:').strip()
data = '%s|%s' % (username, password)
with open(r'userinfo.txt', 'w') as write_f:
    write_f.write(data)

username = input('请输入用户名:').strip()
password = input('请输入密码:').strip()
with open(r'userinfo.txt', 'r') as read_f:
    data = read_f.read()
    infor = data.split('|')
if username == infor[0] and password == infor[1]:
    print(f'{infor[0]},登录成功')
else:
    print('登录失败!')
# 拔高要求:
# 用户可以连续注册
# 用户可以多账号切换登录(多用户)
# 文件内有多个用户信息
# ps: 思考多用户数据情况下如何组织文件内数据结构较为简单
# 提示: 本质其实就是昨天作业的第二道题
# 只不过数据库由数据类型变成文件
print('注册页面')
# 不断的注册
while True:
    register = input('是否要注册账号y/n:')
    # 判断用户是否要注册账号
    if register == 'y':
        # 获取用户注册的用户名和密码
        username = input('输入用户名:').strip()
        password = input('输入密码:').strip()
        data = '%s|%s\n' % (username, password)
        # 写入文本文件中
        with open(r'userinfo.txt', 'a') as write_f:
            write_f.write(data)
    elif register == 'n':
        break
print('登录页面')
flag = True
while flag:
    username = input('请输入用户名:').strip()
    password = input('请输入密码:').strip()
    with open(r'userinfo.txt', 'r') as read_f:
        # 循环遍历文本文件中的账号
        for i in read_f:
            # 去掉尾部的换行符号
            data = i.strip('\n')
            # 识别|,然后进行分割,分割后是列表
            infor = data.split('|')
            # 判断用户输入的姓名与密码是否正确
            if username == infor[0] and password == infor[1]:
                print(f'{infor[0]},登录成功')
                # 是否登录其他账号
                login = input('是否要切换其他账号登录y/n:')
                if login == 'y':
                    # 如果要登陆的话回到一开始继续登录
                    break
                else:
                    # flag重新定义一下不再登录
                    flag = False
                    break
        else:
            print('登录失败!')
posted @ 2022-06-29 18:32  张张包~  阅读(69)  评论(0编辑  收藏  举报