栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

文件的读写,操作模式

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

文件的读写,操作模式

今日内容
文件的读写模式

主要是with方法

with也可以同时打开多个文件

格式:

 with open(r'', '', encoding='utf8') as 变量名:
 	pass  # 为了补全代码的格式,让其不会报错,但实际没有任何代码意义
 	...  # 这种也是可以

读写功能:
r 全称为read,读的意思;默认的模式
w 全称为write,写的意思
a 也是写的意思,但是与w有所区别

r

当使用该模式的时候,程序就只有读的模式,没有其他模式的权限

当写入路径不存在的时候,会报错

eg:

with open(r'b.txt', 'r', encoding='utf8') as f:
    pass
输出结果:
D:python.3.6.4python36.exe D:/pythonProject/day13/02.py
Traceback (most recent call last):
  File "D:/pythonProject/day13/02.py", line 1, in 
    with open(r'b.txt', 'r', encoding='utf8') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'b.txt'

Process finished with exit code 1

当文件路径不存在的时候,系统会报错,并且提示你文件不存在。

当路径存在的时候,系统会打开并等待读取

with open(r'a.txt', 'r', encoding='utf8') as f:
    data = f.read()
    print(data)
输出结果:
这个时候就会显示出你文件里的东西,但是你只有读的权限
D:python.3.6.4python36.exe D:/pythonProject/day13/02.py
dfdfdsfdf

Process finished with exit code 0

w

当使用该模式的时候,文件只有写的权限

当我们写入的文件不存在的时候,系统会自动给我们创建一个文件

eg:

with open(r'b.txt', 'w', encoding='utf8') as f:
    pass

当写入的文件路径存在的时候,我们现在文件里写一些东西

eg:

这里我们先在文件里写入一些东西,然后进行代码操作

with open(r'b.txt', 'w', encoding='utf8') as f:
    f.write('123')

然后我们在打开b.txt文件看一下

这里我们可以看到以前的东西没有了

总结:

在w模式下,文件只有写的权限,当文件路径不存在的时候,不会报错,会给我们自动创建一个文件;
当文件路径存在的时候,文件里面有东西的情况下,我们往里面写东西的时候,文件会先清除掉文件
里的动西,然后再写入。

a

在该模式下,文件也只有写的权限。但是与w不同的地方在于,当文件路径存在的时候,我们往里面加东西的时候,不会先清除掉文件里的东西,而是直接在文件末尾追加。

在文件路径不存在的时候

eg:

with open(r'c.txt', 'a', encoding='utf8') as f:
    f.write('123')  # 123

文件不存在的时候,会先自动创建一个文件,然后再往里面加

当文件存在的时候

eg:

写入代码:

with open(r'b.txt', 'a', encoding='utf8') as f:
    f.write('123')


但是这里,我们可以发现,追加的时候,并没有换行追加;因为,没有指令,计算机是不会帮我们做事的。我们可以这样处理:

with open(r'b.txt', 'a', encoding='utf8') as f:
    f.write('123n')

文件的操作模式
tb
文本模式二进制模式

t

文本操作的默认模式

其实上面的读写模式,都是rt,wt,at,只是将t隐藏起来了。
这个模式只支持文本操作。
这个模式操作时,必须加encoding='utf8'
而且读写都是以字符串为单位

b

二进制模式

当要用这种模式的时候,必须加b,不能被省略
这个模式的时候,不用加encoding='utf8'
读写都是以bytes为单位

eg:

with open(r'1.jpg', 'rb') as f:
    data = f.read()
    print(data)

这个就是图片的二进制

文件操作的诸多方法
操作用法
read()一次性读取文件,并且光标停在最末尾
readline()一次性读取一行
readlines()按照行读取全部内容,然后以列表的形式返回
readable()判断读的能力
writable()判断写的能力
write()只有写的能力,填写文件内容
writelines()支持存放多个数据类型的数据值(容器类型)
今日作业
  • 作业一

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

代码:

l1 = input('请输入你需要复制的文件路径:').strip()
l2 = input('请输入你拷贝的文件路径:').strip()
# 先读取输入文件信息
with open(fr'{l1}', 'rb') as f:
    txt = f.read()  # 将其赋值起来
# 创建一个文件
with open(fr'{l2}', 'wb') as f:
    f.write(txt)  # 将读出来的文件写进去
  • 作业二

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

代码:

is_tage = True
print('欢迎来到xxx系统')
while is_tage:
	# 打开文件,刚开始是没有的
    with open(r'userinfo.txt', 'r', encoding='utf8') as f:
        txt = f.read()
    print('''
        "1 注册"
        "2 登录"
        "3 退出系统"'''
        )
    num = input("请输入你的指令:")
    # 注册,如果用户存在,则提示,并返回,如果不存在,创建在表里
    if num == '1':
        name = input('请输入你注册的用户名:').strip()
        new_name = name + '|'  #  新建变量名绑定库里的名字加|,用于判断用户名是否存在
        # for循环判断用户名是否存在
        for line in txt:
            if new_name in txt:
                print('用户已存在')
                break
        # for循环循环完,或者不满足条件的时候进行
        else:
            pwd = input('请输入你注册的密码:').strip()
            pwd1 = input('请确认密码:').strip()
            if pwd1 != pwd:
                print('密码不正确!')
                continue
             # 文件不存在,会自动创建文件
            with open(r'userinfo.txt', 'a', encoding='utf8') as f:
                f.write(f'{name}|{pwd}n')  # 用字符串的格式化往库里尾部追加用户信息,并且换行
                print('注册成功!')
    elif num == '2':
    	# 循环3次
        for i in range(3):
            if is_tage == True:
                username = input('请输入你的用户名:').strip()
                password = input('请输入你的密码:').strip()
                res1 = ('|'.join((username, password)))
                # 读取文件,并且赋值
                with open(r'userinfo.txt', 'r', encoding='utf8') as f:
                    txt = f.read()
                if res1 in txt:
                    print('登录成功!')
                    is_tage = False
                    i = input('是否想清理你的数据库(s/n):')
                    # 清空数据库的数据值
                    if i == 's':
                        q = open('userinfo.txt', 'r+')
                        q.truncate()
                        print('已清理,欢迎下次光临!')
                    else:
                        print('退出成功')
                        is_tage = False
                else:
                    print('用户名或者密码输入错误!')
                    continue
        if is_tage == True:  # 全局标志位
            sum = input('你已经输入三次了,是否重新注册(y/q):').strip()
            if sum == 'y':
                continue
            else:
                print('退出页面,欢迎下次光临!')
                break
    elif num == '3':
        print('欢迎下次光临!')
        is_tage = False
    else:
        print('未收到正确指令')
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997449.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号